用YUI Compressor压缩SeaJS单独模块文件

近来正在研究SeaJS,碰到了压缩问题。原因是YUI Compressor在压缩SeaJS模块文件时,会把模块文件里面的requireexportsmodule等参数给替换了,导致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)});

可以看到requireexportsmodule三个参数名已经被替换了,如果不想被替换,可以用YUI Compressornomunge功能。在刚才的模块文件里面添加"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)});

看,requireexportsmodule三个参数名并没有被替换了,而且增加的"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

附:

此条目发表在 软件 分类目录,贴了 , , 标签。将固定链接加入收藏夹。