【问题标题】:env-vars in React using Dotenv and WebpackReact 中的 env-vars 使用 Dotenv 和 Webpack
【发布时间】:2019-12-30 12:05:29
【问题描述】:

我想访问我在前端 (React) 中定义的一些环境变量。

我有以下设置:

  • React + NodeJS(我不使用create-react-app
  • Webpack 4
  • Dotenv

我尝试关注https://medium.com/@trekinbami/using-environment-variables-in-react-6b0a99d83cf5#0618,但它不起作用,也抛出任何错误。

webpack.config.js

const dotenv = require("dotenv");

module.exports = () => {
  // call dotenv and it will return an Object with a parsed key
  const env = dotenv.config().parsed;

  // reduce it to a nice object, the same as before
  const envKeys = Object.keys(env).reduce((prev, next) => {
    console.log(prev)
    prev[`process.env.${next}`] = JSON.stringify(env[next]);
    return prev;
  }, {});

return { 
  ...,
  plugins: [
      new webpack.DefinePlugin(envKeys)
  ],
  ...
}

通过上面的 Webpack 配置,我想我应该可以在 file.js 中执行 <h4>My var: {process.env.REACT_APP_MY_VAR}</h4>,当然我已经在位于项目根目录的 .env 文件中定义了 REACT_APP_MY_VAR

我希望file.js 呈现REACT_APP_MY_VAR 的值,但我没有呈现任何内容,无论是值还是错误。

【问题讨论】:

  • dotenv 旨在在您的代码从开发人员机器转移到 CI 环境再到生产服务器时,对代码保密。如果某些不受信任的人获得了您的代码,他们也不会获得您的秘密。前端代码不同。您总是将其发送到浏览器以供任何人阅读。不要将敏感信息放在前端代码中并跳过使用 dotenv 以避免错误的安全感。相反,您可以直接为webpack.DefinePlugin 定义一个对象(envKeys 变成什么)

标签: javascript reactjs webpack dotenv


【解决方案1】:

我建议使用dotenv-webpack 而不是dotenv 包以便于配置。

4 个简单步骤:-

1) 使用安装dotenv-wepack

npm install dotenv-webpack --save

2) 在应用程序根目录创建.env 文件

API_URL=http://localhost:8000

3) 将此添加到您的 webpack 配置文件中。

const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

4) 在应用程序中的任何地方使用环境变量。

import React from 'react';

    const App = () => {
        return (
            <h1>{process.env.API_URL}</h1>        
        );
    }
    export default App;

希望对你有帮助!!!

【讨论】:

  • 谢谢!它可以工作,但我更喜欢使用 dotenv,因为这样我可以确保不暴露任何秘密(我将检查 env-var 名称是否以“REACT_APP_”开头)并且我还没有找到使用dotenv-webpack.. .
猜你喜欢
  • 2021-02-06
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2022-07-05
  • 2019-06-07
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多