0

grunt copy定义了一对任务:

copy : {
    develop : {
        expand : true,
        flatten : false,
        cwd : "develop/",
        src : ["index.html", "gwt/**/*", "!**/*.less", "!**/*.scss", "modules/**/*", "components/**/*", "resources/**/*", "!resources/styles/**"],
        dest : "build/"
    },
    // TODO: figure out how to update glyphicon paths to build
    bootstrap_assets : {
        expand : true,
        flatten : false,
        src : ["bower_components/bootstrap-sass/assets/fonts/**/*"],
        dest : "build/"
    },
}

并将它们组合在自定义任务中

// Intermediate Task - Copy dev resources to build
grunt.registerTask("copy_dev", ["copy:develop", "copy:bootstrap_assets"]);

modules文件夹内,我想复制所有内容但scss文件。当我运行时grunt copy:develop,这具有我期望的行为,除了*.scss复制之外的所有文件。但是,当我运行时grunt copy_dev,所有内容modules都会被复制过来。

这是输出的一部分grunt copy_dev --verbose

Running "copy:develop" (copy) task
Verifying property copy.develop exists in config...OK
Files: develop/modules/front-page -> build/modules/front-page
Files: develop/modules/front-page/front-page.html -> build/modules/front-page/front-page.html
Files: develop/modules/front-page/front-page.scss -> build/modules/front-  page/front-page.scss
Files: develop/modules/login -> build/modules/login
Files: develop/modules/login -> build/modules/login
Files: develop/modules/login/bigLogo.png -> build/modules/login/bigLogo.png
Files: develop/modules/login/login-view.html -> build/modules/login/login-view.html
Files: develop/modules/login/login.js -> build/modules/login/login.js
Files: develop/modules/login/login.scss -> build/modules/login/login.scss
Files: develop/modules/login/logo -> build/modules/login/logo
Files: develop/modules/login/logo/lg.png -> build/modules/login/logo/lg.png
Files: develop/modules/login/logo/md.png -> build/modules/login/logo/md.png
Files: develop/modules/login/logo/sm.png -> build/modules/login/logo/sm.png

如您所见,*.scss执行自定义任务时会复制许多文件,而它们不会通过常规copy:$name调用进行。

为什么是这样?

4

1 回答 1

2

您的问题是 Grunt 从左到右处理您的 src/dest 指令以构建要复制的文件列表,而不是同时应用所有规则(http://gruntjs.com/configuring-tasks#globbing-patterns) , 所以:

  • "index.html" > 添加 index.html
  • "gwt/**/*" > 添加 gwt 下的所有内容
  • "!**/*.less" >从当前副本列表中删除所有less文件,即gwt下的less文件
  • "!**/*.scss" > 同上
  • "modules/ /*" > 添加模块下的所有内容**包括less和scss文件
  • ...

因此,如果您想防止 all less 和 scss 被复制,则需要更改订单:

src : ["index.html", "gwt/**/*", "modules/**/*", "components/**/*", "resources/**/*", "!**/*.less", "!**/*.scss", "!resources/styles/**"]
于 2015-09-22T20:43:44.887 回答