Search code examples
gruntjsgrunt-contrib-concatgrunt-contrib-uglify

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


I'm using grunt-contrib's concat and uglify modules to process some javascript. Currently if src/js/ is empty, they will still create an (empty) concat'd file, along with the minified version and a source map.

I want to task to detect if the src/js/ folder is empty before proceeding, and if it is, then the task should skip (not fail). Any ideas how to do this?


Solution

  • 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