如何避免GruntJS中不必要的丑化?
我有一个具有以下定义的grunt文件:如何避免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文件发生更改的情况下,
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文件,其中包含源文件的上次修改时间。不是最好的,但能解决你的问题。