Wallace 的回答很好,但是如果您尝试缩小的文件在 grunt 开始之前不存在(即,如果您依赖于另一个任务),它将无法工作,因为地图是在任何任务运行之前生成的。
我提出了一个单独缩小生成文件的解决方案,使用节点包 uglify-js 而不是 grunt-contrib-uglify。
- 将 uglify-js 添加到你的 package.json
- 将以下示例之一添加到您的 Grunfile(如果您使用示例 1,只需将“您的文件”替换为适当的 glob)。
- 如果您需要更改缩小的文件目标或扩展名,请改用示例 2。它使用带有回调的 grunt.file.recurse 为您提供每个文件的根目录、子目录和文件名(然后构建自定义目标路径更容易)。将“FOLDER”替换为您要扫描的目录,并构建您自己的“CUSTOM PATH HERE”。
示例 1:使用 grunt.file.expand
grunt.registerTask('uglifyFiles', 'Uglifies files', function () {
var jsp = require("uglify-js").parser,
pro = require("uglify-js").uglify,
count = 0;
grunt.file.expand(['YOUR FILES HERE']).forEach(function (abspath) {
// Exclude already minified files (with extension .min.js)
if (!abspath.match(/\.min\.js$/i)) {
// Get Abstract Syntax Tree
var ast = jsp.parse(grunt.file.read(abspath));
// If mangling
// ast = pro.ast_mangle(ast);
// If squeezing
ast = pro.ast_squeeze(ast);
// Write new file
grunt.file.write(abspath.replace(/\.js$/i, '.min.js'), pro.gen_code(ast));
count += 1;
}
});
grunt.log.oklns("Successfully uglified " + count + " files");
});
示例 2:使用 grunt.file.recurse
grunt.registerTask('uglifyFiles', 'Uglifies files', function () {
var jsp = require("uglify-js").parser,
pro = require("uglify-js").uglify,
count = 0;
grunt.file.recurse('FOLDER', function callback(abspath, rootdir, subdir, filename) {
// Exclude already minified files (with extension .min.js)
if (!abspath.match(/\.min\.js$/i)) {
// Get Abstract Syntax Tree
var ast = jsp.parse(grunt.file.read(abspath));
// If mangling
// ast = pro.ast_mangle(ast);
// If squeezing
ast = pro.ast_squeeze(ast);
// Write new file, using abspath or rootdir, subdir and filename
grunt.file.write('CUSTOM PATH HERE', pro.gen_code(ast));
count += 1;
}
});
grunt.log.oklns("Successfully uglified " + count + " files");
});