Grunt:如何只为修改后的文件运行任务?

我有以下gruntfile.js:

module.exports = function(grunt) { require('jit-grunt')(grunt); grunt.initConfig({ uglify: { options: { manage: false }, my_target: { files: [{ expand: true, cwd: 'assets/js', src: '*.js', dest: 'min' }] }, }, less: { development: { options: { compress: true, yuicompress: true, optimization: 2 }, files: { "assets/css/styles.css": "assets/less/styles.less" // destination file and source file } } }, watch: { styles: { files: ['assets/less/**/*.less', 'assets/js/*.js'], // which files to watch tasks: ['less', 'uglify'], options: { nospawn: true } } } }); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-newer'); grunt.registerTask('default', ['less', 'watch', 'newer:uglify']); }; 

一切运行良好,但对于JS文件,即使文件没有改变,它也会生成缩小版本。

例如,如果我有script1.jsscript2.jsscript3.js ,但只对script1.js进行了更改 – 所有其他的也将生成。

只有在文件已经改变的情况下,是否有任何方法才能应用uglify任务? 我试图使用grunt-newer但由于某种原因不能正常工作。

在initConfig中,您应该在手表设置中使用较新的名称来调用uglify:

 watch: { styles: { files: ['assets/less/**/*.less', 'assets/js/*.js'], tasks: [**'newer:uglify'**], options: { nospawn: true } }