2013-03-04 58 views
37

我已经安装了grunt任务grunt-contrib-copy。我将它嵌入到我的Gruntfile.js中,并通过grunt.loadNpmTasks('grunt-contrib-copy');加载任务。配置grunt复制任务以排除文件/文件夹

目前我使用下面的配置来创建一个文件夹与我的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和全部文件?

回答

51

找到了解决办法:

没有必要对这些行:

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/'} 
     ] 
+18

要省略目录,使用'!workingdir /省略/ **' – Ben 2014-05-21 18:31:01

0

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

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

谢谢您的回答,我已经改变了/ **/*到/ **但这并没有帮助。行为仍然是一样的。 – mybecks 2013-03-04 12:02:56

+0

只是想知道你是否正在'output/Gruntfile.js'中运行'Gruntfile.js'。如果是这样,请从其他位置运行或排除它。 – 2013-03-04 20:08:10

+0

我不需要以{exapnd ...}开头的最后一行。只需要两条{src ...}行。 – mybecks 2013-03-05 11:16:49

3

如果你有自由更改为不同的咕噜任务:

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

它与普通副本有点不同,因为它支持修改时间。但这可能实际上是受欢迎的(这是我的情况)。

自述:

就像是更新和维护修改时间复制的文件咕噜-contrib请复制,但只有复制文件。用于创建可以使用依赖文件修改时间的工具同步的构建目录。

(我是该项目(至少到目前为止)。只有用户)

+2

如果您将'!'添加到'src'属性中的模式,您实际上不需要此属性,并且这是一种可以使用的模式在任何其他咕task任务。 http://gruntjs.com/configuring-tasks#globbing-patterns – 2013-09-27 21:27:09

12

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

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

所以可能会尝试!**/*.less, !gruntfile.js(没有括号)

2

假设“Gruntfile.js”是在根目录下,最后一行您的复制选项将其配置为将根中的所有内容复制到“输出/”。

如果需要,请在您的src文件路径数组中添加'!Gruntfile.js'。

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

参考这些解决方案从这个threadoriginal thread

相关问题