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

前端 未结 3 553
無奈伤痛
無奈伤痛 2021-02-08 23:30

I\'m using grunt-contrib\'s concat and uglify modules to process some javascript. Currently if src/js/ is empty, they will still create a

相关标签:
3条回答
  • 2021-02-08 23:50

    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

    0 讨论(0)
  • 2021-02-08 23:52

    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'
        ]);
      }
    });
    
    0 讨论(0)
  • 2021-02-08 23:59

    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();
    
    0 讨论(0)
提交回复
热议问题