39

我已经安装了 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/**/*

4

5 回答 5

57

找到了解决方案:

不需要这些行:

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/'}
       ]
于 2013-03-05T11:23:16.830 回答
15

我想在我的副本中排除所有 .gz 文件,这个选项对所有文件夹都有效

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

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

于 2015-02-02T12:31:19.430 回答
3

如果您有权更改为不同的 Grunt 任务:

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

它的工作方式与常规副本有点不同,因为它尊重修改时间。但这实际上可能是受欢迎的(就我而言)。

从自述文件:

与 grunt-contrib-copy 类似,但仅复制较新的文件并维护复制文件的修改时间。对于创建可以稍后使用依赖文件修改时间的工具同步的构建目录很有用。

(我只是那个项目的用户(至少到目前为止)。)

于 2013-07-29T08:28:44.267 回答
3

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

如果这是有意的,请将“!Gruntfile.js”添加到您的 src 文件路径数组中。

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

从这个线程原始线程参考这些解决方案

于 2015-04-08T12:34:26.600 回答
0

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

{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
于 2013-03-04T10:31:11.960 回答