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

时间:2014-03-18 00:05:38

标签: gruntjs grunt-contrib-concat grunt-contrib-uglify

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

我想在继续之前检测src/js/文件夹是否为空,并且如果是,则任务应跳过(不失败)。任何想法如何做到这一点?

3 个答案:

答案 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'
    ]);
  }
});