configurationgrunt复制任务以排除文件/文件夹

我已经安装了grunt任务grunt-contrib-copy 。 我将它Gruntfile.js到我的Gruntfile.js并通过grunt.loadNpmTasks('grunt-contrib-copy');加载任务grunt.loadNpmTasks('grunt-contrib-copy');

目前我使用以下configuration来创build一个文件夹与我的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/'} ] } } 

这工作正常,但每次运行咕噜复制退出时出现以下错误信息:

 Copying Gruntfile.js -> output/Gruntfile.js Warning: Error while processing "Gruntfile.js" file. Use --force to continue. 

我想在js/**/*排除Gruntfile.js和所有*.less文件。 试了一下!(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) …但没有任何效果。 将其添加到processContentExclude数组中,但没有成功。

那么如何排除文件夹结构js/**/*Gruntfile.js和全部文件?

find解决办法:

这些线路不需要:

 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

所以下面两行就是这个工作。 无需select或其他任何东西。 为了避免*.less文件'!**/*.less' *.less '!**/*.less'做这个工作。

 files: [ {src: ['.conf1', '.conf2', 'config.js'], dest: 'output/toolkit/', filter: 'isFile'}, {src: ['css/**', 'img/**', 'js/**', 'release/**', 'lib/**', 'locale/**', '!**/*.less'], dest: 'output/toolkit/'} ] 

我想排除在我的副本中的所有.gz文件,这个选项做了所有文件夹的工作

 { expand: true, cwd: './build/www/', src: [ '**', '!**/*.gz' ], dest: './mydDest' } 

所以可能会试试!**/*.less, !gruntfile.js (no parens)

如果你有自由去改变一个不同的Grunt任务:

还有https://github.com/clavery/grunt-copy-to ,它有一个明确的“忽略”选项来指定要省略的文件和目录。 Github中的README显示了一个包含忽略选项的示例configuration。

它与正常的副本有点不同,因为它支持修改时间。 但是,这可能真的很受欢迎(这是我的情况)。

从自述文件:

像grunt-contrib-copy一样,只复制较新的文件,并保留复制文件的修改时间。 用于创build构build目录,以后可以使用依赖文件修改时间的工具同步。

(我只是该项目的用户(至less目前为止))。

假设“Gruntfile.js”位于根目录下,复制选项中的最后一行将其configuration为将根目录中的所有内容复制到“output /”。

如果是这样,请将'!Gruntfile.js'添加到您的src文件path数组中。

 { expand: true, cwd: './', src: ['**'], // ex. src: ['**', '!Gruntfile.js'], dest: 'output/' } 

从这个线程和原始线程请参考这些解决scheme

我认为这应该做到这一点。 不需要/**/*/**覆盖path及其子目录中的所有文件

 {src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'}, {expand: true, cwd: './', src: ['**'], dest: 'output/'}