8

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

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

4

3 回答 3

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

于 2014-03-24T21:16:12.770 回答
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();
于 2014-03-22T09:16:18.533 回答
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'
    ]);
  }
});
于 2016-01-07T14:09:47.263 回答