You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在webpack中根据运行模式加载对应.env文件的环境变量

解决步骤

1. 修改package.json脚本,区分不同运行模式

给启动和打包命令加上--mode参数显式指定运行模式:

"scripts": {
  "start": "webpack-dev-server --config ./webpack.config.js --mode development",
  "build": "webpack --config ./webpack.config.js --mode production"
}

2. 改写webpack配置为动态导出函数

webpack支持将配置导出为函数,函数会接收命令行传入的参数,我们可以从参数中拿到当前运行的mode值,动态加载对应的.env文件:

const webpack = require("webpack");
const path = require("path");

const HtmlWebpackPlugin = require("html-webpack-plugin");
const Dotenv = require("dotenv-webpack");

// 导出函数,第二个参数argv包含命令行传入的mode值
module.exports = (env, argv) => {
  const mode = argv.mode || "development"; // 兜底默认是开发模式
  return {
    mode: mode,
    entry: path.resolve(__dirname, "./src/index.jsx"),
    devtool: mode === "development" ? "source-map" : false, // 生产模式可以关闭source-map优化性能
    output: {
      path: path.join(__dirname, "/dist"),
      filename: "bundle.js",
    },
    devServer: {
      port: 3000,
      static: true,
      historyApiFallback: true,
      open: true,
    },
    resolve: {...},
    module: {...},
    plugins: [
      // 给Dotenv指定加载对应模式的env文件
      new Dotenv({
        path: path.resolve(__dirname, `.env.${mode}`),
        // 可选配置:如果有公共的环境变量可以放在.env文件,通过defaults参数加载
        // defaults: path.resolve(__dirname, '.env')
      }),
      new HtmlWebpackPlugin({
        template: "public/index.html",
        filename: "index.html",
        favicon: "public/favicon.ico",
      }),
      new webpack.ProvidePlugin({
        Buffer: ["buffer", "Buffer"],
      }),
      new webpack.ProvidePlugin({
        process: "process/browser",
      }),
    ],
  }
};

3. 验证效果

分别在.env.development和.env.production文件中定义变量,比如:

# .env.development
APP_API_URL = http://localhost:8080/api
# .env.production
APP_API_URL = https://your-production-domain.com/api

在前端代码中直接使用process.env.APP_API_URL即可获取到对应模式下的变量值。

注意:前端代码中使用的环境变量会在打包时被硬编码到输出的bundle文件中,不要存放密钥、密码等敏感信息。

内容的提问来源于stack exchange,提问作者CCCC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:04