开发环境下:
1.每次修改不用全部重新打包(HMR功能):
在devServer里,加 hot :true
index.html:
index.js:
source-map,构建源代码和构建后代码的映射,如果构建后的代码出问题,知道在哪个源代码中,便于修改。只需要在webpack.config.js中加入devtool:'source-map'
inline-只生成内联source-map,只有一个source-map
hidden:隐藏源代码
eval :每一个文件都生成对应source-map
nosource:全部隐藏
cheap:只显示错误到行
module: 将loader的source map加入
生产环境:
1.oneOf
由于文件会把所有的rules都走一遍,所以,需要给给些规则加oneOf[...]:而把需要两次处理的如对js的语法检查放在最开始。
2.缓存优化:babel缓存、源代码缓存
文件资源缓存:强缓存更新不及时,所以使用hash 给文件取个别名,如果文件改了文件名就改了,会重新请求资源。但是打包导致所有文件hash都变了。资源全部重新申请。需要用到chunkHash,但是同一个chunkhash的其他文件也会改名。最后使用contenthash,只有本文件改了才重新请求。
3. tree shaking:去除没有使用的代码
前提:使用ES6模块化、开启production 环境
4.代码分割--》实现并行加载、按需加载
1.
2.
3.
5.懒加载和预加载:
懒加载:文件需要才会加载。把需要懒加载的文件单独分割,将import放在某个异步函数的回调里(如click)。不会重复加载,只有第一次加载,后面就用缓存中的文件了
预加载:webpackPrefetch:true 文件一开始就被加载了,只是在其他必须文件加载完后偷偷加载的。
6.PWA:像APP一样可以离线访问
(使用方法不讲了,兼容性不太好)
7.多进程打包,加快打包速度(放在某个loader后面):
8.externals,资源原本是用连接引入的,防止打包成我们自己的文件
DLL(第三方库单独打包,只需要打包一次):