近来正在研究SeaJS,碰到了压缩问题。原因是YUI Compressor在压缩SeaJS模块文件时,会把模块文件里面的require、exports、module等参数给替换了,导致SeaJS无法辨认,如下面代码所示:
define(function(require,exports,module){
var $ = require("jquery");
console.log($);
});
上面这段代码经过YUI Compressor压缩后就会变成下面这样:
define(function(b,a,c){var d=b("jquery");console.log(d)});
可以看到require、exports、module三个参数名已经被替换了,如果不想被替换,可以用YUI Compressor的nomunge功能。在刚才的模块文件里面添加"require:nomunge,exports:nomunge,module:nomunge";
,如下所示:
define(function(require,exports,module){
"require:nomunge,exports:nomunge,module:nomunge";
var $ = require("jquery");
console.log($);
});
经YUI Compressor压缩后的代码如下:
define(function(require,exports,module){var a=require("jquery");console.log(a)});
看,require、exports、module三个参数名并没有被替换了,而且增加的"require:nomunge,exports:nomunge,module:nomunge";
也会被自动消除,这样在SeaJS里就可以正常使用了。不过有下面几点需要注意:
-
"require:nomunge,exports:nomunge,module:nomunge";
这段文字必须要添加在函数体的开始位置; - 只有YUI Compressor才会消除
"require:nomunge,exports:nomunge,module:nomunge";
字样,其它压缩软件不能自动消除; - YUI Compressor不支持合并多个SeaJS模块文件的功能,如果想合并多个SeaJS模块文件,要用spm。
附: