Wallace からの回答は素晴らしいですが、縮小しようとしているファイルが grunt の開始前に存在しない場合 (つまり、別のタスクに依存している場合)、タスクが実行される前にマップが生成されるため、機能しません。
grunt-contrib-uglify の代わりにノード パッケージ uglify-js を使用して、生成されたファイルを個別に縮小するソリューションを思いつきました。
- package.json に uglify-js を追加します。
- 次の例のいずれかを Grunfile に追加します (例 1 を使用している場合は、"YOUR FILES HERE" を適切な 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");
});