我正在使用 grunt-contribconcat
和uglify
模块来处理一些 javascript。目前,如果src/js/
为空,他们仍将创建一个(空)concat'd 文件,以及缩小版本和源映射。
我想src/js/
在继续之前检测文件夹是否为空,如果是,则任务应该跳过(不失败)。任何想法如何做到这一点?
我正在使用 grunt-contribconcat
和uglify
模块来处理一些 javascript。目前,如果src/js/
为空,他们仍将创建一个(空)concat'd 文件,以及缩小版本和源映射。
我想src/js/
在继续之前检测文件夹是否为空,如果是,则任务应该跳过(不失败)。任何想法如何做到这一点?
解决方案可能不是最漂亮的,但可以给你一个想法。你需要先运行类似的东西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
使用这个插件:
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();
也许这只是一个更新的答案,因为其他人已经超过一年了,但是您不需要为此使用插件;您可以使用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'
]);
}
});