将IIFE与grunt / uglify结合使用

时间:2015-08-04 17:39:26

标签: node.js gruntjs uglifyjs

uglify(或其他节点包,如果需要)是否有办法将我的所有IIFE组合成一个IIFE?在我的项目中,我们在IIFE中编写每个文件,并将单个全局文件作为参数传递给IIFE。

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

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

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

1 个答案:

答案 0 :(得分:0)

  

uglify(或其他节点包,如果需要)是否有办法   将我的所有IIFE组合成一个IIFE?

是的,但有局限性。您可以使用带有两个可能性的grunt-contrib-uglify

  • 使用wrap
  • 使用bannerfooter (稍微更多地控制输出)

Gruntfile.js中的配置为:

<强> wrap

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

wrap的值将是您要传递的exportglobal变量。这应该适用于多个IFEE,因为您的全局变量将被传递给其他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);中。至少根据我的理解,下行是不能在IIFE中编写代码,因为IIFE将在您的输出中生成。

在官方documentation中阅读更多内容。