【问题标题】:How use env in webpack?如何在 webpack 中使用 env?
【发布时间】:2020-11-14 14:56:38
【问题描述】:

我创建了具有不同值的 .env 和 .env.production 文件:

API=http://localhost:8082/api/

创建的配置:

var config = {};
config.api = process.env.API; 
module.exports = config;

我尝试在操作中获取配置,但“api”字段未定义。

const config = require("../config/server");
console.log(config);

我认为需要在启动命令中添加一些东西

"start": "webpack-dev-server --mode development --inline --progress",
"production": "webpack-dev-server --mode production --inline --progress",

但我不确定我应该在这里添加什么。 你能帮帮我吗?

【问题讨论】:

标签: reactjs express webpack environment-variables


【解决方案1】:

我使用 dotenv 包和定义插件。

我们首先解析 .env 文件,然后迭代组装对象的值。之后我们将组装好的对象传递给定义插件。定义插件将它们设置为可从您的应用程序访问的全局常量。

const dotenv = require('dotenv');

const fileEnv = dotenv.config({ path: '.env.development' }).parsed;
    
const envKeys = Object.keys(fileEnv).reduce((prev, next) => {
    prev[`process.env.${next}`] = JSON.stringify(fileEnv[next]);
    return prev;
}, {});

module.exports = {
...
    plugins: [
        new webpack.DefinePlugin(envKeys),
    ],
...
}

【讨论】:

  • 但是在这个例子中如何设置生产配置呢?
  • 只需将 .env.development 更改为您想要提供的任何 .env 文件。在您的情况下,它将是 .env.production。我运行两个配置文件,webpack.prod.js 和 webpack.dev.js。他们每个人都有一个各自的 .env 文件。如果你想重用代码,可以使用 webpack 合并插件。
  • 不太想拥有两个 webpack 配置。重复次数过多
  • 可以,但是需要配置'.env.development'行
  • 不需要维护两个webpack文件。仅使用单个 webpack.config.js 文件将您的 .env(将其添加到 .gitignore)文件保存在本地。对于生产,请在生产机器中设置 API 环境变量。
【解决方案2】:

在项目根目录中创建一个webpack.config.js,并按照以下建议在其中添加条目

webpack.config.js

// Do the imports at top of config file
var webpack = require('webpack');
var dotenv = require('dotenv').config({path: __dirname + '/.env'});

....

// In plugins section
plugins: [
  ...
  new webpack.DefinePlugin({ "process.env": dotenv.parsed })
]

别忘了install dotenv 包。 (yarn add dotenv/npm install --save dotenv)。

然后修改start脚本如下

"start": "webpack"

要获得有关webpack.config.js 选项的更多见解,请check here

(或)

编辑

如果您只有较少的环境变量并且不想将它们维护在单独的文件中(.env/.env.production)并通过webpack加载它DefinePlugincross-env 之类的库在这里会派上用场。

如下更改你的脚本

"start": "cross-env API=http://localhost:8082/api webpack-dev-server --mode development --inline --progress",
"production": "cross-env API=https://prodsite.com/api webpack-dev-server --mode production --inline --progress",

你也可以添加多个变量

"start": "cross-env NODE_ENV=... API=... webpack-dev-server ..."

【讨论】:

  • 它的答案与下面的相同。我仍然找不到设置环境的方法。我想在启动命令中设置配置: "start": "webpack-dev-server --NODE_ENV=development --mode development --inline --progress" 并读入 webconfig NODE_ENV 变量
  • 更新了我的答案(编辑)。希望对你有帮助?
  • @Mediator,如果您发现任何 比此处发布的答案更简单的解决方案,请您发布 your answer,以便在类似用例中帮助我和其他人。
  • 我不确定它是否是一个更简单的解决方案。我使用一个主要的 webpack 配置并与 prod 和 dev webpack 配置合并。 “webpack-dev-server --config webpack.prod.js --mode production”我还在努力,所以我不想选择答案作为解决方案
  • 我没有使用 cross-env,但看起来不错的答案,但我需要更多时间来找出最适合我的方法
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2017-12-28
  • 2021-07-03
相关资源
最近更新 更多