2013-10-30 40 views
2

我試圖設置一個Gruntfile.js只醜化剛剛更改過的文件。我從這個問題改編一些這和Gruntfile.js,只醜化已更改的文件

How to uglify only changed file with Grunt.js watch task if dynamic expansion in Uglify has been enabled?

給出的答覆正如我理解這一點,應在表的事件被觸發的事件,那麼這將改變醜化任務src是當前文件路徑。然而,GruntJS仍然醜化所有文件,而不僅僅是剛剛更改的文件。

我不確定我是否簡單地誤解了GruntJS在這裏的工作方式,但任何人都可以提出我要去哪裏出錯?

var productionPath = "production", devPath = "dev"; 

module.exports = function(grunt) { 
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 

    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     uglify: { 
      options: { 
       banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 
      }, 
      build: { 
       expand: true, 
       cwd: devPath + '/js/', 
       src: ['**/*.js'], 
       dest: productionPath + '/js/', 
       ext: '.min.js' 
      } 
     }, 
     watch: { 
      options: { spawn: false }, 
      scripts: { 
       files: [devPath + '/**/*.js'], 
       tasks: ['uglify'] 
      } 
     } 
    }); 

    grunt.registerTask('default', ['uglify', 'watch']); 

    grunt.event.on('watch', function(action, filepath, target) { 
     grunt.config('uglify.build.src', filepath); 
    }); 
}; 

回答

4

你應該幫個忙,在這種情況下使用grunt-newer,它可以讓你做你想做的事很容易。

從理論上講,您應該可以註冊一個常規的uglify任務和目標,然後簡單地將newer加入它。

grunt.registerTask('build', ['newer:uglify:something']); 

或者乾脆在命令行

grunt newer:uglify:something