加快Webpack热加载速度的实践
在开发应用时,很多时候影响我们开发体验最关键的一环其实就是热加载的速度。
当你加一条 console.log(1);
在组件中的时候,要等足足30几秒,任谁都头皮发麻。
而这正是我在开发 webpack
应用的时候的常态。而我的应用还在逐步的增长...
我在网上找到了很多方法去做优化热加载速度这件事,终于将热加载速度降低至3-5s,提升了6倍!这里列举一些我的优化措施:
1.衡量速度
安装 speed-measure-webpack-plugin
这个插件将会列举出我们每个插件在构建中使用的时间,以便优化
使用 webpack 参数 --progress profile
这个命令行参数是将 webapck 打包过程中的信息暴露出来,我们可以清楚地看到在那些地方使用了较长的时间
2.去除不必要的插件
将开发环境下不需要的插件去除
NormalModuleReplacementPlugin
由于这个插件是为了根据不同环境打出不同的 api 层,而开发环境是默认的环境引入,所以通常这个插件不需要在开发环境下加载。
image-webpack-loader
这个 loader 是为了在图像的时候提供压缩以提高图片在生产环境下的呈现效果,因此开发环境也不需要。
3.使用 esbuild-loader ✨
esbuild 绝对是前端的明星技术,也是 vite
构建如此之快的秘籍,既然我的 webpack
配置齐全,那我是完全没有动力去做升级 vite
这件事的。我强烈推荐 webpack
项目中使用 esbuild
,它是所有举措中见效最快的。
安装
npm i -D esbuild-loader
module.exports = {
module: {
rules: [
- {
- test: /\.js$/,
- use: 'babel-loader',
- },
+ {
+ test: /\.js$/,
+ loader: 'esbuild-loader',
+ options: {
+ loader: 'jsx', // Remove this if you're not using JSX
+ target: 'es2015' // Syntax to compile to (see options below for possible values)
+ }
+ },
...
],
},
}
module.exports = {
module: {
rules: [
- {
- test: /\.tsx?$/,
- use: 'ts-loader'
- },
+ {
+ test: /\.tsx?$/,
+ loader: 'esbuild-loader',
+ options: {
+ loader: 'tsx', // Or 'ts' if you don't need tsx
+ target: 'es2015'
+ }
+ },
...
]
},
}
4.使用 exclude 关键字
使用 exclude
可以使 loader 跳过该文件/文件夹,是加快 webpack 构建速度的重要手段
module.exports = {
module: {
rules: [
{
test: /\.(ts|tsx)$/,
use: 'ts-loader',
exclude: /node_modules/,
},
...
]
},
}
总结
这篇文章作为我的实践,当我弯弯绕绕优化了 webpack
热加载速度的时候,希望将实践写出来以便给其他人有点参考,也给自己一个参考。由于 webpack
是这样相当大的一个体系,当然里面有很多我没有讲到的插件和优化手段,这点有问题欢迎随时补充指正。希望每个人体验到丝滑般开发的体验。