How can I skip a grunt task if a directory is empty

ぐ巨炮叔叔 提交于 2019-12-03 07:03:49

The solution may not be the prettiest, but could give you an idea. You'll need to run something like npm install --save-dev glob first. This is based on part of the Milkshake project you mentioned.

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

A gist for comparison: https://gist.github.com/kosmotaur/61bff2bc807b28a9fcfa

With this plugin:

https://www.npmjs.org/package/grunt-file-exists

You can check file existence. (I didn't try, but the source looks like supporting grunt expands. (*, ** ...)

For example like this::

grunt.initConfig({
  fileExists: {
    scripts: ['a.js', 'b.js']
  },
});

grunt.registerTask('conditionaltask', [
    'fileExists',
    'maintask',
]);

But maybe if the file doesn't exist it will fail with error instead of simple skip. (I didn't test it.)

If this is a problem you can modify a bit the source of this plugin to run the related task if the file exists:

The config:

grunt.initConfig({
  fileExists: {
    scripts: ['a.js', 'b.js'],
    options: {tasks: ['maintask']}
  },
});

grunt.registerTask('conditionaltask', [
    'fileExists',
]);

And you should add this:

grunt.task.run(options.tasks);

In this file:

https://github.com/alexeiskachykhin/grunt-file-exists/blob/master/tasks/fileExists.js

after this line:

grunt.log.ok();

Maybe this is just a more up-to-date answer as the others are more than a year old, but you don't need a plugin for this; you can use grunt.file.expand to test if files matching a certain globbing pattern exist.

Update of @Kosmotaur's answer (path is just hard-code here though for simplicity):

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'
    ]);
  }
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!