如何避免GruntJS中不必要的丑化?

如何避免GruntJS中不必要的丑化?,gruntjs,Gruntjs,我有一个具有以下定义的grunt文件: uglify: { build: { src: 'www/temp/application.js', // a concatenation of files via grunt-contrib-concat dest: 'www/temp/application.min.js' } }, 我真正想做的是,只有在application.js文件发生更改的情况下,

我有一个具有以下定义的grunt文件:

uglify: {
        build: {
                src: 'www/temp/application.js', // a concatenation of files via grunt-contrib-concat
                dest: 'www/temp/application.min.js'
        }
},
我真正想做的是,只有在
application.js
文件发生更改的情况下,才重新计算最终的
application.min.js
。更准确地说,我想添加一个条件:

# pseudocode

if (getFileContents(application.js) == getFileContents(previously.uglified.application.js)) {
    // do nothing
} else {
    // run uglifying on application.js
}
原因:

  • 我用git部署我的项目,而且uglifying相对比较慢(3秒以上),而且,这是不必要的,因为我不经常更改JS文件

    • 有几种可能的解决方案:

      您可以创建自己的grunt任务,该任务将检查文件的上次修改时间,例如,使用准备好的选项作为参数运行
      uglify
      task-through

      也可以通过过滤函数动态生成文件对象:

      var fs = require('fs');
      
      module.exports = function (grunt) {
      
        function filterChanged(files) {
          var mtime = '',
              stats;
      
          for (var dest in files) {
            stats = fs.statSync(files[dest]);
      
            try {
              mtime = fs.readFileSync(files[dest] + '.mtime', 'utf8');
            }
            catch (ex) {
              fs.writeFileSync(files[dest] + '.mtime', stats.mtime, 'utf8');
              return files;
            }
      
            if (stats.mtime == mtime || !mtime) {
              delete files[dest];
            }
            else {
              fs.writeFileSync(files[dest] + '.mtime', stats.mtime, 'utf8');
            }
          }
      
          return files;
        }
      
        grunt.initConfig({
          uglify: {
            build: {
              files: filterChanged({
                'www/temp/application.min.js': 'www/temp/application.js'
              })
            }
          }
        });
      
      };
      

      这会导致每次运行
      uglify
      任务时调用
      filterChanged
      函数。

      +1获取Node.js的文档链接(我不太了解平台)。基于我的问题,我正在寻找类似于
      fs.readFile
      的东西。谢谢你给我的+1。我花了一段时间,用实际工作的过滤器样本编辑了答案。它基于.mtime文件,其中包含源文件的上次修改时间。不是最好的,但能解决你的问题。