copy: {
build: {
cwd: 'app',
src: ['**', '!**/vendors/**', '!**src/js/*.js',],
dest: 'dist',
expand: true
}
}
我正在使用grunt构建脚本为已完成的产品构建分发文件夹。但是,它不是100%自动和动态。例如,我有一个xml内容文件的文件夹。然而,我并没有全部使用它们。现在,整个文件夹被复制到构建版本。手动我必须进入并删除构建版本中不需要的xml文件然后运行它。或者我可以进入grunt文件并告诉它忽略这些文件。
问题在于我不想每次都这样做。我有一个理论上的想法是有一个xml文件,我在其中定义元素来表示某些其他文件。
<bootstrap>true</bootstrap>
<extraContent>false</extraContent>
这可以说在构建中应该或不应该忽略与bootstrap和extraContent相关的文件。我想弄清楚你是否可以用咕噜声这样做。
以下是我如何看待逻辑播放...
var bootstrap = $(xml).find("bootstrap").text()
if(bootstrap == "false"){
var url = src/bootstrap.css
//Here add the correlated filepath defined above to be ignored
}
问题不仅在于写这个咕噜咕噜知道它是什么,而且还将该逻辑与我上面显示的实际“copy:{}”脚本相结合
答案 0 :(得分:0)
如果您想根据内容包含/排除文件,可以使用filter
功能。示例可以在官方文档中找到:https://gruntjs.com/configuring-tasks#custom-filter-function。
filter属性可以帮助您定位更详细的文件。
在你的情况下,这可能是这样的:
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。