我使用grunt和grunt-contrib-copy; 我的目标:我想将文件夹中的所有文件复制到另一个文件夹,但可配置的文件列表
copy: {
files: [{
expand:true,
cwd: './dist/Assets/',
src: [
'**/*',
'!{Css,Images}/**/*',
'!Js/{filetoexlude1.js,filetoexclude2.js}'
],
filter: 'isFile',
dest:'./deploy/Assets/'
}]
}
由于我不想在任务中编写文件列表,我用这个内容编写了一个名为files.json的json文件:
{
"filestoexcludefromcopy":[
"filetoexclude1.js",
"filetoexclude2.js"
]
}
在Gruntfile.js中:
filestoexcludefromcopy: grunt.file.readJSON('files.json').filestoexcludefromcopy,
并修改了我的任务:
copy: {
files: [{
expand:true,
cwd: './dist/Assets/',
src: [
'**/*',
'!{Css,Images}/**/*',
'!Js/{<%= filestoexcludefromcopy%>}'
],
filter: 'isFile',
dest:'./deploy/Assets/'
}]
}
运行良好...除了在files.json内部只有一个文件...有人可以帮我正确配置任务吗?谢谢!
答案 0 :(得分:0)
修改强>
当length
数组的filestoexcludefromcopy
为1时,Grunt似乎以不同方式处理template。
为了避免这种怪癖,当filestoexcludefromcopy
只有一个时,您可以将空项目推送到length
数组。
虽然这不是特别优雅 - 但它运作成功。
<强> Gruntfile.js 强>
filestoexcludefromcopy: (function() {
var files = grunt.file.readJSON('files.json').filestoexcludefromcopy;
if (files.length === 1) {
files.push(''); // Ensures files array length is greater than 1.
}
return files;
}()),
copy: {
foo: { // Added a target
files: [{
expand: true,
cwd: './dist/Assets/',
src: [
'**/*',
'!{Css,Images}/**/*',
'!Js/{<%= filestoexcludefromcopy%>}'
],
filter: 'isFile',
dest: './deploy/Assets/'
}]
}
}
原始回答
从模板中删除花括号{}
。即改变这个:
'!Js/{<%= filestoexcludefromcopy%>}'
到此:
'!Js/<%= filestoexcludefromcopy%>'
注意:在下面的要点中,copy
任务中也添加了Target。
<强> Gruntfile.js 强>
//...
filestoexcludefromcopy: grunt.file.readJSON('files.json').filestoexcludefromcopy,
copy: {
foo: { // Add a Target to the 'copy' Task
files: [{
expand: true,
cwd: './dist/Assets/',
src: [
'**/*',
'!{Css,Images}/**/*',
'!Js/<%= filestoexcludefromcopy%>' // Remove the curly braces.
],
filter: 'isFile',
dest: './deploy/Assets/'
}]
}
}
//...