【Webpack】开发环境优化
1、HMR 热模块替换
当一个模块改变时,只重新打包这一个模块,提升了构建速度
devServer: {
static: './dist',
hot:true//开启 HMR
},
- 样式文件:可以使用 HMR 功能,因为 style-loader 内部实现了
- js 文件:默认不能使用 HMR 功能
- html 文件:默认不能使用 HMR 功能,同时不能热更新(解决:在 entry 入口处添加 html 文件),但是一般不用做
entry: ['./src/index.js','./src/index.html'],
2、source-map
一种提供源代码到构建后代吗映射技术,(如果构建后代码出错了,通过映射可以追踪到源代码错误),在 webpack.config.js 中添加:
devtool:'source-map'
开发环境下:
- 速度快:(eval > inline > cheap)
- 调试更友好:(source-map > cheap-module-source-map > cheap-cource-map)
在大多数情况下,最佳选择是 eval-cheap-module-source-map
3、oneOf
可以将各种 loader 放入一个数组中,数组为 oneof
module: {
rules: [
{
oneOf:[
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
{
test:/\.js$/,
exclude:/node_modules/,
loader:'eslint-loader',
options:{
fix:true
}
},
]
},
],
},
这样只会执行一次 loader 操作,但是不能将操作同样文件的 loader 一起放入 oneOf 中,将多余的放到外面来
4、缓存
- 通过babel 缓存(让第二次打包构建速度更快)
module: {
rules: [
{
test:/\.js$/,
exclude:/node_modules/,
loader:'babel-loader',
options:{
preset:[
[
'@babel/preset-env',
{
useBuiltIns:'usage',
corejs:{
version:3
},
targets:{
chrome:'60',
firefox:'60'
}
}
]
],
//开启 babel 缓存
cacheDirectory:true
}
}
],
},
- 通过文件名改变来缓存(让代码上线运行缓存更好使用,存在浏览器上)
output: {
filename: 'main.[contenthash:10].js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
由于每次输出文件都会产生新的 hash 值,将其添加到输出文件名中可以起到缓存的作用
5、tree shaking 去除无用代码
前提:1、必须使用 ES6 模块化,2、开启 production 环境
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了