如何使grunt-contrib-copy不复制LESS文件?

时间:2014-10-18 23:39:25

标签: gruntjs

我有以下Gruntfile:

module.exports = function(grunt) {
    //Project configuration.
    grunt.initConfig({      
        copy: {
            main: {
                files: [
                    {
                        expand: true,
                        cwd: "source/",
                        src: ["!**/*.less", "**"],
                        dest: "compiled/"
                    },
                ],
            },
        },
    });

    grunt.loadNpmTasks("grunt-contrib-copy");
    grunt.registerTask("default", ["copy"]);
};

我的目标是将其从source文件夹复制到compiled文件夹。例如,如果在运行Grunt之前这是我的文件结构...

[root]
 - Gruntfile.js
 - source
    \- test.txt
    \- sample.html
    \- file.less
 - compiled

......我期待着......

[root]
 - Gruntfile.js
 - source
    \- test.txt
    \- sample.html
    \- file.less
 - compiled
    \- test.txt
    \- sample.html

...但我得到了:

[root]
 - Gruntfile.js
 - source
    \- test.txt
    \- sample.html
    \- file.less
 - compiled
    \- test.txt
    \- sample.html
    \- file.less

我认为将源设置为["!**/*.less", "**"]可以解决这个问题,但事实并非如此。为什么这不起作用(实际上是什么目标)以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在匹配模式之后应该放置否定模式,因为它们否定了之前的匹配:

copy: {
  main: {
    files: [
      {
        expand: true,
        cwd: "source/",
        src: ["**", "!**/*.less"],
        dest: "compiled/"
      },
    ],
  },
}

有关示例,请参阅globbing patterns docs,例如:

// All files in alpha order, but with bar.js at the end.
{src: ['foo/*.js', '!foo/bar.js', 'foo/bar.js'], dest: ...}

在你的否定模式之后放置"**",你就会覆盖它。