现象:构建后的代码存在大量闭包代码

// a.js
export default 'a-member'

// b.js
import addNumbers from './a'

console.log(addNumbers)

打包后:

Untitled

导致的问题

使用 Scope Hoisting:webpack 默认支持(mode: 'production')

要求:必须是 ES6 的语法,CJS 的方法不支持。

Webpack 3 需要添加 webpack.optimize.ModuleConcatenationPlugin()

// webpack.config.js
module.exports = {
  //...
  plugins: [
    new webpack.optimize.ModuleConcatenationPlugin()
  ]
}

Scope Hoisting 原理

模块转换分析

Untitled

结论:

分析: