Gruntjs 如果目录为空,如何跳过grunt任务

Gruntjs 如果目录为空,如何跳过grunt任务,gruntjs,grunt-contrib-concat,grunt-contrib-uglify,Gruntjs,Grunt Contrib Concat,Grunt Contrib Uglify,我正在使用grunt contrib的concat和uglify模块来处理一些javascript。当前,如果src/js/为空,他们仍将创建一个(空)concat'd文件,以及缩小版本和源映射 我希望任务在继续之前检测src/js/文件夹是否为空,如果为空,则任务应跳过(而不是失败)。有什么办法吗?使用此插件: 您可以检查文件是否存在。(我没有尝试,但源代码看起来支持grunt扩展。(*,**…) 例如: grunt.initConfig({ fileExists: { scri

我正在使用grunt contrib的
concat
uglify
模块来处理一些javascript。当前,如果
src/js/
为空,他们仍将创建一个(空)concat'd文件,以及缩小版本和源映射

我希望任务在继续之前检测
src/js/
文件夹是否为空,如果为空,则任务应跳过(而不是失败)。有什么办法吗?

使用此插件:

您可以检查文件是否存在。(我没有尝试,但源代码看起来支持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);
在此文件中:

在这一行之后:

grunt.log.ok();

这个解决方案可能不是最漂亮的,但可以给你一个想法。你需要先运行类似于
npm安装--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'
    ]);
  }
});

比较要点:

也许这只是一个更为最新的答案,因为其他答案已经有一年多的历史了,但您不需要插件;您可以使用
grunt.file.expand
测试是否存在与某个全局模式匹配的文件

@Kosmotaur答案的更新(为了简单起见,路径在这里只是硬代码):


你介意发布一份你的
grunfile.js
吗?你有没有试过只通过
uglify
来做任何事情(还有连接),只是为了测试?相关/重复?这里提供了源代码:我正在特别尝试解决GrunFile.js中的第二个和第三个TODO。看起来它会起作用,但我更喜欢一个更干净的解决方案,而不是使用grunt文件的补丁版本。:)谢谢,这正是我所需要的!谢谢你的更新,马克!您能为您的代码提供更多的上下文吗?我会直接在
src
字符串值或
文件
数组中使用它吗?或者我会像@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'
    ]);
  }
});