在grunt / uglify中合并IIFE

uglify(或其他节点包,如果需要的话)有办法把我所有的IIFE结合成一个单一的IIFE吗? 在我的项目中,我们将每个文件写入一个IIFE中,并将单个全局文件作为parameter passing给IIFE。

使用最精简的JS,具有“使用严格”指令的IIFE是31 bytesa是我们的单个全局)。

 (function(a){"use strict";/* code here */}()); 

这意味着如果我们有20个源文件,我们最终会有600个字节的浪费空间。 如果我们有100个源文件,就浪费了3100字节…

uglify(或其他节点包,如果需要的话)有办法把我所有的IIFE结合成一个单一的IIFE吗?

是的,但有限制。 你可以使用grunt-contrib-uglify ,它有两个可能性:

  • 使用wrap
  • 使用bannerfooter (给你稍微更多的输出控制)

你的Gruntfile.jsconfiguration是:

wrap

 uglify: { options: { wrap: 'foo', }, files: { 'path/to/output.min.js': ['path/to/input/*.js'] } } 

wrap的值将是您想要传递的exportglobalvariables。 这应该与多个IFEE一起工作,因为您的全局variables将被传递给其他IFEE。

bannerfooter

 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将会在你的输出中生成。


请阅读官方文档 。