首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取xml文件以确定要复制哪些文件的Grunt构建脚本

读取xml文件以确定要复制哪些文件的Grunt构建脚本
EN

Stack Overflow用户
提问于 2018-06-07 03:27:52
回答 1查看 87关注 0票数 0
代码语言:javascript
复制
copy: {
  build: {
    cwd: 'app',
    src: ['**', '!**/vendors/**', '!**src/js/*.js',],
    dest: 'dist',
    expand: true
  }
}

我正在使用grunt构建脚本为完成的产品构建分发文件夹。然而,它并不是100%自动和动态的。例如,我有一个包含xml内容文件的文件夹。然而,我并没有全部使用它们。现在,整个文件夹都被复制到构建版本中。手动地,我必须进入并删除构建版本中不需要的xml文件,然后运行它。或者我可以进入grunt文件,并告诉它忽略这些文件。

问题是我不想每次都这么做。我有一个理论上的想法,那就是创建一个xml文件,在其中定义元素来表示某些其他文件。

代码语言:javascript
复制
<bootstrap>true</bootstrap>
<extraContent>false</extraContent>

这意味着与bootstrap和extraContent相关的文件应该或不应该在构建中被忽略。我想知道你能不能用嘟嘟声做这件事。

下面是我看到的逻辑……

代码语言:javascript
复制
var bootstrap = $(xml).find("bootstrap").text()
if(bootstrap == "false"){
   var url = src/bootstrap.css
   //Here add the correlated filepath defined above to be ignored
}

问题不仅在于如何让grunt知道它是什么,还在于如何将该逻辑与我上面展示的实际"copy:{}“脚本结合起来

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:11:51

如果你想根据文件的内容包括/排除文件,你可以使用filter函数。示例可以在官方文档中找到:https://gruntjs.com/configuring-tasks#custom-filter-function

filter属性可以帮助您以更详细的级别确定文件的目标。

在您的示例中,可能是这样的:

代码语言:javascript
复制
copy: {
  build: {
    cwd: 'app',
    src: ['**', '!**/vendors/**', '!**src/js/*.js',],
    dest: 'dist',
    expand: true,

    // this filter function will copy xml files only when `bootstrap` is set to 'true'
    filter: filepath => {
      if (require('path').extname(filepath) !== 'xml')
        return true;
      const xml = require('fs').readFileSync(filepath, 'utf8');
      const json = require('xml2json').toJson(xml);
      return json.bootstrap === 'true';
    }

  }
}

然后,您可以使用process函数仅复制特定文件中的某些内容:https://github.com/gruntjs/grunt-contrib-copy#process

此选项将作为控制复制的文件内容的高级方法传递给grunt.file.copy。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档