uglify(或其他节点包,如果需要)是否有办法将我的所有IIFE组合成一个IIFE?在我的项目中,我们在IIFE中编写每个文件,并将单个全局文件作为参数传递给IIFE。
使用最精简的JS,具有“使用严格”指令的IIFE是31 bytes
(a
是我们的单一全局。)
(function(a){"use strict";/* code here */}());
这意味着如果我们有20个源文件,我们最终会浪费600个字节的空间。如果我们有100个源文件,那就浪费了3100个字节......等等。
答案 0 :(得分:0)
uglify(或其他节点包,如果需要)是否有办法 将我的所有IIFE组合成一个IIFE?
是的,但有局限性。您可以使用带有两个可能性的grunt-contrib-uglify
:
wrap
banner
和footer
(稍微更多地控制输出) Gruntfile.js
中的配置为:
<强> wrap
强>
uglify: {
options: {
wrap: 'foo',
},
files: {
'path/to/output.min.js': ['path/to/input/*.js']
}
}
wrap
的值将是您要传递的export
或global
变量。这应该适用于多个IFEE,因为您的全局变量将被传递给其他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);
中。至少根据我的理解,下行是不能在IIFE中编写代码,因为IIFE将在您的输出中生成。
在官方documentation中阅读更多内容。