关键配置项
- entry
查找依赖的入口文件配置,入口文件可以多个
单页面应用入口配置
1 | module.exports = { |
多页面应用入口配置
1 | const path = require('path') |
- 入口 boundle 如何插入对应的 html?
使用 HtmlWebpackPlugin 自动处理
1 | cosnt plugins = [] |
- output
输出 bundle 相关信息
1 | { |
- resolve
该配置主要用于解析模块依赖的自定义项:
modules: 用于加速绝对路径查找效率
alias: 用户自定义模块查找路径
1 | resolve: { |
扩展:使用了绝对路径,vscode 智能代码导航失效。根目录配置 jsconfig.json
1 | { |
- module
配置 rules, 对于不同资源的处理器
1 | module: { |
- optimization
minimizer: 配置输出的文件压缩插件
js: webpack 集成的 uglifyjs,Terser支持es6、支持多进程压缩
css: optimize-css-assets-webpack-plugin(使用 cssnano 作为处理引擎,去除重复代码)
splitChunks: webpack4.x 新功能,优化公共 chunk 提取策略
- plugin
包含整个构建过程任何阶段:报告构建耗时、修改输出代码支持主域重试、添加构建进度报告、代码压缩
、资源替换等
实现插件对输出结果处理时,应当在文件输出到磁盘前处理
开发体验优化
- 组件热刷新、CSS热刷新
- dev 模式使用
webpack.HotModuleReplacementPlugin
插件 - 所有 entry 中插入
require.resolve('../utils/webpackHotDevClient')
react官方 create-react-app - webpack-dev-server 模块启动参数添加 hot:true
- 需要热加载的js文件添加如下代码:
if(process.env.NODE_ENV === 'development' && module.hot){
module.hot.accept()
}
- SSR热调试
解决方案: webpack watch+nodemon,node 服务需要的 html/js 通过 webpack 插件动态输出,当 nodemon 检查到变化后将自动重启, html 文件中的静态资源全部替换成 dev 模式下的资源,保持 socket 连接自动更新页面
- style 调试
style-loader 开始 sourceMap 后,sourceMap 是内联在 style 文件中,需要通过 link 导入,本质通过 javascript 生成 blob 后 link 标签解析。(问题:FOUC 页面加载后闪烁)
解决方法:singleton: true
性能优化
- node_modules 缓存
JB系统缓存(@tencent/im-build模块自动缓存)
OCI编译系统
- 构建中间结果缓存
webpack 缓存的内容:loader处理结果、plugin处理结果、输出文件结果
- babel-loader 缓存,通过 cacheDirectory 开启缓存
1 | test: /\.jsx?$/, |
- eslint-loader 缓存,通过 cache 指定缓存路径
1 | test: /\.(js|mjs|jsx)/, |
- css/scss 缓存
1 | { |
- 输出代码压缩缓存,JS压缩引擎多进程处理
1 | { |