webpack 处理多环境配置的核心是分离公共与差异项:抽离 webpack.common.js 放通用配置(入口、输出、基础 loader、html 插件等),dev/prod 文件专注环境特性,再用 webpack-merge 安全合并,支持函数式导出与定制化策略。

Webpack 处理不同环境配置的核心思路是:把重复部分抽出来,环境差异单独写,再用 webpack-merge 安全合并。不靠一堆 if 判断硬塞进一个文件,也不手动复制粘贴,结构清晰、改一处不漏一处。
拆出公共配置(webpack.common.js)
只放所有环境都用得上的内容,比如入口路径、输出目录、基础 loader(Babel、CSS)、HTML 插件、别名、resolve 规则等。避免把 devServer 或压缩插件这类环境专属项放进来。
- entry 和 output.path 是典型公共项
- module.rules 中处理 JS、CSS、图片的基础规则可通用
- HtmlWebpackPlugin、DefinePlugin(定义全局常量)也常出现在公共层
- 不要在 common 里写 mode、devtool、optimization 这类明显分环境的字段
按环境补差异(webpack.dev.js / webpack.prod.js)
开发配置专注调试体验:开启热更新、加 source map、启动本地服务;生产配置专注交付质量:启用压缩、哈希命名、Tree Shaking、提取 CSS、清理 dist 目录。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- webpack.dev.js 加
devServer、devtool: 'eval-source-map'、HotModuleReplacementPlugin - webpack.prod.js 加
optimization.minimize: true、MiniCssExtractPlugin、CleanWebpackPlugin - 两个文件都导出对象,不写 mode —— 合并后由主配置统一传入
用 webpack-merge 合并配置
安装后,在主配置文件(如 webpack.config.js)中导入 merge,并组合配置:
- 先
require('./config/webpack.common')和对应环境文件 - 调用
merge(commonConfig, envConfig)得到最终配置 - 支持函数式导出,根据
argv.mode自动选 config:module.exports = (env, argv) => merge(common, argv.mode === 'production' ? prod : dev) - 数组默认连接(如 plugins),对象默认递归合并,不会覆盖整个 module.rules
需要更精细控制时用 mergeWithCustomize
普通 merge 满足大多数场景,但遇到插件去重、loader 规则前置/替换等需求,就得定制策略:
- 比如防止多个 HotModuleReplacementPlugin 被重复注入,可用
unique('plugins', ['HotModuleReplacementPlugin']) - 想让某个 loader 总是排在 rules 最前面,用
customizeArray: { 'module.rules': 'prepend' } - mergeWithRules 更适合按路径匹配做差异化合并,比如只对
module.rules.test应用特定逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










