在grunt / uglify中合并IIFE
uglify(或其他节点包,如果需要的话)有办法把我所有的IIFE结合成一个单一的IIFE吗? 在我的项目中,我们将每个文件写入一个IIFE中,并将单个全局文件作为parameter passing给IIFE。
使用最精简的JS,具有“使用严格”指令的IIFE是31 bytes
( a
是我们的单个全局)。
(function(a){"use strict";/* code here */}());
这意味着如果我们有20个源文件,我们最终会有600个字节的浪费空间。 如果我们有100个源文件,就浪费了3100字节…
uglify(或其他节点包,如果需要的话)有办法把我所有的IIFE结合成一个单一的IIFE吗?
是的,但有限制。 你可以使用grunt-contrib-uglify
,它有两个可能性:
- 使用
wrap
- 使用
banner
和footer
(给你稍微更多的输出控制)
你的Gruntfile.js
configuration是:
wrap
uglify: { options: { wrap: 'foo', }, files: { 'path/to/output.min.js': ['path/to/input/*.js'] } }
wrap
的值将是您想要传递的export
或global
variables。 这应该与多个IFEE一起工作,因为您的全局variables将被传递给其他IFEE。
banner
和footer
uglify: { options: { banner: '(function (a) {', footer: '})(foo);' }, files: { 'path/to/output.min.js': ['path/to/input/*.js'] } }
你的输出将被封装在(function (a) { /* your other scripts */ })(foo);
。 至less我的理解是,至less在我的理解中,你不能在IIFE中编写你的代码,因为IIFE将会在你的输出中生成。
请阅读官方文档 。