webpack 通过 mode 配置和 defineplugin 注入编译时变量区分环境:mode 控制压缩、sourcemap 等默认行为,defineplugin 静态替换 process.env.node_env 等变量,配合配置函数与 webpack-merge 实现多环境灵活管理。

Webpack 区分开发与生产环境,关键不是运行时判断,而是构建阶段就确定行为——靠 mode 配置 和 编译时变量注入 两件事搞定。
用 mode 控制基础行为
Webpack 内置了 development 和 production 两种模式,直接决定代码压缩、SourceMap、Tree Shaking 等默认优化策略:
-
开发环境:设
mode: 'development',保留可读性、启用快速 SourceMap(如eval-cheap-source-map),不压缩代码,方便调试 -
生产环境:设
mode: 'production',自动启用代码压缩(Terser)、Scope Hoisting、SplitChunks 分包、移除 console 和 debugger,禁用 SourceMap(或用 hidden-source-map) - 可在配置文件中硬编码,也可通过命令行传参:
webpack --mode=development或webpack --mode=production
用 DefinePlugin 注入环境变量
仅靠 mode 不够,业务代码常需根据环境切换 API 地址、日志开关等。Webpack 提供 DefinePlugin 在构建时静态替换变量,安全且无运行时开销:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在开发配置中写:
'process.env.NODE_ENV': JSON.stringify('development'),'API_BASE_URL': JSON.stringify('http://localhost:3000') - 在生产配置中写:
'process.env.NODE_ENV': JSON.stringify('production'),'API_BASE_URL': JSON.stringify('https://api.example.com') - JS 中直接使用:
if (process.env.NODE_ENV === 'development') { ... },生产构建时整段会被 Terser 删除,不会打包进最终文件 - 注意:必须用
JSON.stringify()包裹字符串值,否则会报ReferenceError
用配置函数 + --env 参数灵活驱动
把 webpack.config.js 导出为函数,就能接收命令行参数,实现一套配置适配多环境:
- 配置导出改为:
module.exports = (env, argv) => { const isProduction = env.production; return { mode: isProduction ? 'production' : 'development', ... } } - package.json 脚本示例:
"dev": "webpack serve --env development","build": "webpack --env production" - 这样既能复用大部分配置,又能按需启用插件(比如开发时加 HotModuleReplacementPlugin,生产时加 MiniCssExtractPlugin)
推荐配置结构:分离 + 合并
大型项目建议拆成三个文件,再用 webpack-merge 组合,清晰又易维护:
-
webpack.common.js:入口、输出路径、Loader 规则、HtmlWebpackPlugin、CleanWebpackPlugin 等通用配置 -
webpack.dev.js:继承 common,添加 devServer、SourceMap、热更新、开发专用插件 -
webpack.prod.js:继承 common,添加代码分割、CSS 提取、资源压缩、环境变量注入 - 合并方式:
const { merge } = require('webpack-merge'); module.exports = merge(commonConfig, prodConfig);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










