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
}
问题不仅在于如何让grunt知道它是什么,还在于如何将该逻辑与我上面展示的实际"copy:{}“脚本结合起来
发布于 2018-06-07 04:11:51
如果你想根据文件的内容包括/排除文件,你可以使用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。
https://stackoverflow.com/questions/50728138
复制相似问题