我正在使用grunt-contrib的concat
和uglify
模块来处理一些javascript。目前,如果src/js/
为空,他们仍会创建一个(空)concat'd文件,以及缩小版本和源地图。
我想在继续之前检测src/js/
文件夹是否为空,并且如果是,则任务应跳过(不失败)。任何想法如何做到这一点?
答案 0 :(得分:3)
解决方案可能不是最漂亮的,但可以给你一个想法。您需要首先运行npm install --save-dev glob
之类的内容。这是基于您提到的Milkshake
项目的一部分。
grunt.registerTask('build_js', function(){
// get first task's `src` config property and see
// if any file matches the glob pattern
if (grunt.config('concat').js.src.some(function(src){
return require('glob').sync(src).length;
})) {
// if so, run the task chain
grunt.task.run([
'trimtrailingspaces:js'
, 'concat:js'
, 'uglify:yomama'
]);
}
});
要比较的要点:https://gist.github.com/kosmotaur/61bff2bc807b28a9fcfa
答案 1 :(得分:2)
使用此插件:
https://www.npmjs.org/package/grunt-file-exists
您可以检查文件是否存在。 (我没有尝试,但源代码似乎支持grunt扩展。(*,** ...)
例如像::
grunt.initConfig({
fileExists: {
scripts: ['a.js', 'b.js']
},
});
grunt.registerTask('conditionaltask', [
'fileExists',
'maintask',
]);
但也许如果文件不存在,它将失败而不是简单的跳过错误。 (我没有测试过。)
如果这是一个问题,你可以修改一下这个插件的来源,以便在文件存在的情况下运行相关的任务:
配置:
grunt.initConfig({
fileExists: {
scripts: ['a.js', 'b.js'],
options: {tasks: ['maintask']}
},
});
grunt.registerTask('conditionaltask', [
'fileExists',
]);
你应该加上这个:
grunt.task.run(options.tasks);
在此文件中:
https://github.com/alexeiskachykhin/grunt-file-exists/blob/master/tasks/fileExists.js
这一行之后:
grunt.log.ok();
答案 2 :(得分:2)
也许这只是一个更新的答案,因为其他人已经超过一年了,但你不需要一个插件;您可以使用grunt.file.expand
来测试是否存在与某个通配模式匹配的文件。
更新@ Kosmotaur的答案(虽然为了简单起见,路径只是硬代码):
grunt.registerTask('build_js', function(){
// if any file matches the glob pattern
if (grunt.file.expand("subdir/**/*.js").length) { /** new bit here **/
// if so, run the task chain
grunt.task.run([
'trimtrailingspaces:js'
, 'concat:js'
, 'uglify:yomama'
]);
}
});