2013-11-20 51 views
2

我一直在尝试一段时间来以特定方式组合两个Grunt JS插件。 基本上,我想使用UglifyJS来缩小目录中的所有JS文件。在此之后,我想使用版本控制插件(在这种情况下是grunt-static-versioning)来实现缓存清除。Grunt Uglify通配符和版本号

我gruntfile如下:

module.exports = function(grunt) { 
grunt.initConfig({ 
    clean: ['dest/js'], 
    uglify: { 
    options: { 
     report: 'min', 
     mangle: true 
    }, 
    my_target: { 
     files: [{ 
     expand: true, 
     cwd: 'src/js', 
     src: '**/*.js', 
     dest: 'dest/js' 
     }] 
    } 
    }, 
    cssmin: { 
    options: { 
    report:'min' 
    }, 
    minify: { 
     expand:true, 
    cwd: 'src/css', 
    src: '**/*.css', 
    dest: 'dest/css', 
    } 
    }, 
    imagemin: { 
    dynamic: { 
     options: { 
     optimizationLevel: 7 
     }, 
     files: [{ 
     expand:true, 
     cwd: 'src/assets', 
     src: ['**/*.{png,jpg,gif}'], 
     dest: 'dest/assets' 
     }] 
    } 
    }, 
    htmlmin: { 
    mini :{ 
     options: { 
     removeComments: true, 
     collapseWhitespace: true, 
     collapseBooleanAttributes: true, 
     removeAttributeQuotes: true, 
     removeRedundantAttributes: true, 
     removeEmptyAttributes: true, 
     useShortDoctype: true 
     }, 
     files: [{ 
     expand:true, 
     cwd: 'src', 
     src: '**/*.html', 
     dest: 'dest' 
     }] 
    } 
    }, 
    versioning: {    // Task 
    options: {    // Task options 
     cwd: '' 
    }, 
    dist: {     // Target 
     options: {    // Target options 
     }, 
     files: [{ 
     assets: '<%= uglify.my_target.files %>', 
     key: 'global', 
     dest: 'dest/js', 
     type: 'js', 
     ext: '.js' 
     }] 
    } 
    } 
}); 
grunt.loadNpmTasks('grunt-contrib-clean'); 
grunt.loadNpmTasks('grunt-static-versioning'); 
grunt.loadNpmTasks('grunt-contrib-uglify'); 
grunt.loadNpmTasks('grunt-contrib-cssmin'); 
grunt.loadNpmTasks('grunt-contrib-imagemin'); 
grunt.loadNpmTasks('grunt-contrib-htmlmin'); 


grunt.registerTask('default', ['clean', 'uglify', 'cssmin', 'imagemin', 'htmlmin', 'versioning']);} 

然而,在执行时出现以下错误:

Running "versioning:dist" (versioning) task 
Warning: Unable to read "dest/js" file (Error code: EISDIR). Use --force to continue. 

我理解,因为DEST/JS不是一个文件,而是一个目录出现此错误,但我不知道如何告诉版本正确的文件名。有没有特别的Grunt JS格式来做到这一点?

回答

3

似乎是有一些额外的选项被启用,导致上述错误。 我已更正这些并做了一些更改。 运行下面的grunt文件,看看你是否可以没有任何错误地执行。

module.exports = function(grunt) { 
grunt.initConfig({ 
    clean : [ 'dest/js' ], 
    uglify : { 
     options : { 
      report : 'min', 
      mangle : true 
     }, 
     my_target : { 
      files : [ { 
       src : 'src/js/*.js', 
       dest : 'dest/js/main.min.js' 
      } ] 
     } 
    }, 
    cssmin : { 
     options : { 
      report : 'min' 
     }, 
     minify : { 
      expand : true, 
      cwd : 'src/css', 
      src : '**/*.css', 
      dest : 'dest/css', 
     } 
    }, 
    imagemin : { 
     dynamic : { 
      options : { 
       optimizationLevel : 7 
      }, 
      files : [ { 
       expand : true, 
       cwd : 'src/assets', 
       src : [ '**/*.{png,jpg,gif}' ], 
       dest : 'dest/assets' 
      } ] 
     } 
    }, 
    htmlmin : { 
     mini : { 
      options : { 
       removeComments : true, 
       collapseWhitespace : true, 
       collapseBooleanAttributes : true, 
       removeAttributeQuotes : true, 
       removeRedundantAttributes : true, 
       removeEmptyAttributes : true, 
       useShortDoctype : true 
      }, 
      files : [ { 
       expand : true, 
       cwd : 'src', 
       src : '**/*.html', 
       dest : 'dest' 
      } ] 
     } 
    }, 
    versioning : { // Task 
     options : { // Task options 
      cwd : 'public', 
      outputConfigDir : 'public/config' 
     }, 
     dist : { // Target 
      options : { // Target options 
      }, 
      files : [ { 
       assets : '<%= uglify.my_target.files %>', 
       key : 'global', 
       dest : 'dest/js', 
       type : 'js', 
       ext : '.js' 
      } ] 
     } 
    } 
}); 

grunt.loadNpmTasks('grunt-contrib-clean'); 
grunt.loadNpmTasks('grunt-static-versioning'); 
grunt.loadNpmTasks('grunt-contrib-uglify'); 
grunt.loadNpmTasks('grunt-contrib-cssmin'); 
grunt.loadNpmTasks('grunt-contrib-imagemin'); 
grunt.loadNpmTasks('grunt-contrib-htmlmin'); 

grunt.registerTask('default', [ 'clean', 'uglify', 'cssmin', 'imagemin', 
     'htmlmin', 'versioning' ]); 
}