我已经安装了grunt任务grunt-contrib-copy
。我将其嵌入Gruntfile.js
并通过grunt.loadNpmTasks('grunt-contrib-copy');
加载任务。
目前,我使用以下配置创建一个包含我的js文件/文件夹子集的文件夹。
copy: {
options: {
processContent: [],
processContentExclude: ['build/**', 'bin/**', '.*', '*.orig', '*.bak', '.*/**', '*.log', 'dist/**', 'test/**', 'dev/**', 'pyserver/**', 'node_modules/**', 'doc/**']
},
du: {
files: [
{src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
]
}
}
这样可以正常工作,但每次我运行grunt copy时都会退出并显示以下错误消息:
Copying Gruntfile.js -> output/Gruntfile.js
Warning: Error while processing "Gruntfile.js" file. Use --force to continue.
我想在Gruntfile.js
中排除*.less
和所有js/**/*
个文件。用!(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js)
尝试了......但没有任何作用。将其添加到processContentExclude
数组中,但也没有成功。
那么如何排除文件夹结构Gruntfile.js
中的js/**/*
和所有较少的文件?
答案 0 :(得分:53)
找到解决方案:
不需要这些行:
files: [
{src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
]
因为{expand: true, cwd: './', src: ['**'], dest: 'output/'}
是新的复制步骤,将所有文件从./
复制到output
。这对我来说不需要,因为上面的行已经将所需的文件复制到output/toolkit
。
所以以下两行就是完成这项工作的。不需要选项或其他任何东西。要阻止*.less
个文件'!**/*.less'
完成工作。
files: [
{src: ['.conf1', '.conf2', 'config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['css/**', 'img/**', 'js/**', 'release/**', 'lib/**', 'locale/**', '!**/*.less'], dest: 'output/toolkit/'}
]
答案 1 :(得分:14)
我想要排除我副本中的所有.gz文件,这个选项可以完成所有文件夹的工作
{
expand: true,
cwd: './build/www/',
src: [ '**', '!**/*.gz' ],
dest: './mydDest'
}
所以可能会尝试!**/*.less, !gruntfile.js
(没有parens)
答案 2 :(得分:3)
如果您可以自由更改为不同的Grunt任务:
还有https://github.com/clavery/grunt-copy-to,它有一个明确的“忽略”选项来指定要省略的文件和目录。 Github中的README显示了一个示例配置,包括忽略选项。
它与常规副本有点不同,因为它符合修改时间。但实际上这可能是受欢迎的(这是我的情况)。
来自自述文件:
与grunt-contrib-copy类似,但仅复制较新的文件并维护复制文件的修改时间。用于创建构建目录,以后可以使用依赖于文件修改时间的工具同步。
(我只是该项目的用户(至少到目前为止)。)
答案 3 :(得分:3)
假设'Gruntfile.js'在根目录中,复制选项中的最后一行是将其配置为将root中的所有内容复制到'output /'。
如果是这样,请将'!Gruntfile.js'添加到您的src文件路径数组中。
{
expand: true,
cwd: './',
src: ['**'], // ex. src: ['**', '!Gruntfile.js'],
dest: 'output/'
}
中的这些解决方案
答案 4 :(得分:0)
我认为应该这样做。不需要/**/*
。 /**
涵盖路径及其子目录中的所有文件
{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}