Grunt Uglify通配符和版本控制

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

我的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格式来做到这一点?

似乎是有一些额外的选项被启用,导致上述错误。 我纠正了这些,并做了一些改变。 运行下面的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' ]); }