code-splitting
webpack 一个亮点功能就是 code-splitting 了。
code-splitting 一般应用在以下两种情况:
- 分割 app 的 vendor 代码。这样,当 app 改动业务代码的时候,vendor 代码不受到改变,那么就可以有效利用游览器对之前 vendor 代码的缓存。
- 对有 SPA 有些不常用的页面做按需加载,用 webpack.config 里的 publicPath 对这些 js 代码做部署,然后当需要用到时再通过 jsonp 的方式加载到 html 里。
配置怎么写呢?
1. vendor 缓存的配置:
|
|
2. 按需加载的配置
|
|
这段代码是在运行时把整个 fs 都加载了,虽然语法看上去像只加载了这三个属性。
|
|
这段代码是只加载了 fs 的三个属性,这种加载称为编译时加载。
tree shaking 做的事情就是把 modules 里没有被 import 过的对象最终不打包进 bundle.js 里。
webpack 2.0 默认支持 modules 的加载方式。
但是,现在的前端都是用 es2015 的语法来写的,webpack 默认对这些语法是不支持的,所以还是要引入 babel-loader 来进行转换。
比如:
|
|
上面这段代码开启了对 react,es2015 语法的支持。
但是,一但使用了 babel-loader 的 es2015,webpack 2.0 默认的 modules 就会被 babel 转成 commonjs 的模块了,享受不到 tree shaking 的福利了。
所以现在一般如果用 babel-loader 的 es2015,都会加一个
这样就告诉 babel-loader,不要把 modules 转成 CMD 了。