webpack打包优化

tree shaking

使用import导入的包,在生产环境下自动去除包内没有引用的代码。这是webpack打包自带的优化

import是es6引入规范(所以记得要装babel)
require是common.js引入规范

scope hosting

转自
在bundle.js文件

// module-a.js
export default 'module A'
// entry.js
import a from './module-a'
console.log(a)

打包

// bundle.js
// 最前面的一段代码实现了模块的加载、执行和缓存的逻辑,这里直接略过
[
  /* 0 */
  function (module, exports, require) {
    var module_a = require(1)
    console.log(module_a['default'])
  },
  /* 1 */
  function (module, exports, require) {
    exports['default'] = 'module A'
  }
]

使用ModuleConcatenationPlugin
插件使用方法

    new webpack.optimize.ModuleConcatenationPlugin(),

结果,把导入导出的模块都放在了一个函数里了

// bundle.js
[
  function (module, exports, require) {
    // CONCATENATED MODULE: ./module-a.js
    var module_a_defaultExport = 'module A'

    // CONCATENATED MODULE: ./index.js
    console.log(module_a_defaultExport)
  }
]

显而易见,这次 Webpack 将所有模块都放在了一个函数里,直观感受就是——函数声明少了很多,因此而带来的好处有:

  1. 文件体积比之前更小。
  2. 运行代码时创建的函数作用域也比之前少了,开销也随之变小。

这个插件不支持common.js语法,因为他支持模块动态加载,这种情况很难分析出模块之间的依赖关系及输出的变量。

happyPack

实现多线程打包进程

抽离公共模块代码

见此

懒加载
let btn = document.getElementById('btn')
btn.addEventListener('click', () => {
  console.log('click');
  import('./other.js').then(data => {
    console.log(data.default.a)
  }).catch(err=>{
    console.log(err);
  })
})
// home.js:37   click
// common.js:3  aa
// home.js:39   12
let common = require('./common.js')
common.com()
module.exports = {
  a:12
}
动态链接库

https://juejin.im/post/5ac42d5c6fb9a028b617b851

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值