rjs-optim
Version:
requirejs optimize
75 lines (65 loc) • 2.06 kB
JavaScript
/* jshint forin:true, noarg:true, noempty:true, newcap:false, eqeqeq:true, loopfunc:true, bitwise:true, strict:true, undef:true, unused:true, curly:true, browser:true, indent:2, maxerr:50 */
/* global require, exports */
(function(){
"use strict";
var _ = require("underscore");
var path = require("path");
var Q = require("q");
var requirejs = require("requirejs");
// ロガー
var logger = require( "./logger" ).get( "requirejs:" );
var logging_success = logger.success;
var logging_error = logger.error;
/**
* requirejsのコンフィグを生成する
* @param {Object} options 設定
*/
exports.getConfig = function(options){
// default values
if( _.isUndefined(options.minify) || _.isNull(options.minify) ){
options.minify = true;
}
var name = options.name;
var baseUrl = options.baseUrl;
var out = options.out;
var minify = String(options.minify) === "true";
var ext = options.ext || ".js";
if( !out && options.outDir ){
out = path.join(options.outDir, name + ext);
}
var config = {
baseUrl : baseUrl,
name : name,
out : out,
almond : true,
optimize : (minify ? "uglify2" : "none"),
uglify2 : {
warnings : true,
mangle : true,
output : { beautify : false },
compress : { sequences : false }
}
};
if( _.isObject(options) ){
_.extend( config, _.pick( options, "shim", "paths", "include", "preserveLicenseComments", "generateSourceMaps", "useSourceUrl" ) );
}
return config;
};
/**
* 実際のoptimize処理
* @param {Object} config requirejsのコンフィグ
*/
exports.optimize = function(config){
var deferred = Q.defer();
try {
requirejs.optimize( config, function(){
logging_success( config.name );
deferred.resolve();
});
} catch(e) {
logging_error(e.message);
deferred.reject();
}
return deferred.promise;
};
}());