grunt 自定义任务复制应该省略的文件
grunt custom task copying files that should be omitted
我定义了一对 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
调用则不会。
这是为什么?
您的问题是 Grunt 从左到右处理您的 src/dest 指令以构建要复制的文件列表,而不是同时应用所有规则 (http://gruntjs.com/configuring-tasks#globbing-patterns),因此:
- "index.html" > 添加 index.html
- "gwt/**/*" > 在 gwt
下添加所有内容
- "!**/*.less" > 从当前复制列表中删除所有less文件,即gwt[=28=下的less文件 ]
- "!**/*.scss" > 同上
- "modules//*" > 添加模块下的所有内容**包括 less 和 scss 文件
- ...
所以如果你想防止all less和scss被复制,你需要改变你的顺序:
src : ["index.html", "gwt/**/*", "modules/**/*", "components/**/*", "resources/**/*", "!**/*.less", "!**/*.scss", "!resources/styles/**"]
我定义了一对 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
调用则不会。
这是为什么?
您的问题是 Grunt 从左到右处理您的 src/dest 指令以构建要复制的文件列表,而不是同时应用所有规则 (http://gruntjs.com/configuring-tasks#globbing-patterns),因此:
- "index.html" > 添加 index.html
- "gwt/**/*" > 在 gwt 下添加所有内容
- "!**/*.less" > 从当前复制列表中删除所有less文件,即gwt[=28=下的less文件 ]
- "!**/*.scss" > 同上
- "modules//*" > 添加模块下的所有内容**包括 less 和 scss 文件
- ...
所以如果你想防止all less和scss被复制,你需要改变你的顺序:
src : ["index.html", "gwt/**/*", "modules/**/*", "components/**/*", "resources/**/*", "!**/*.less", "!**/*.scss", "!resources/styles/**"]