【问题标题】:Dynamic access of environment variables in NextJS not workingNextJS中环境变量的动态访问不起作用
【发布时间】:2021-07-09 10:00:08
【问题描述】:

我无法在 NextJS 中动态访问环境变量。在.env.local 我有:

NEXT_PUBLIC_TEST=test

_app.tsx 我有:

const test = "NEXT_PUBLIC_TEST";
console.log(process.env.NEXT_PUBLIC_TEST); // = 'test'
console.log(process.env[test]); // = undefined

我在 Create React APP 中尝试过同样的事情:

# .env
const test = 'REACT_APP_TEST'
console.log(process.env.REACT_APP_TEST) // = 'test'
console.log(process.env[test]) // = 'test'

有人知道为什么 NextJS 不允许这样做以及如何覆盖它吗?我知道next.config.js 是一个东西,但我想使用.env

【问题讨论】:

  • @brc-dd 是,检查你的控制台,它正在记录未定义的日志
  • 我需要浏览器中的值,这就是问题

标签: javascript reactjs next.js create-react-app


【解决方案1】:

根据official docs

注意:为了保证服务器机密的安全,Next.js 在构建时将process.env.* 替换为正确的值。这意味着process.env 不是标准的 JavaScript 对象。

因此,您尝试做的事情只能在开发模式下进行,在服务器端代码中也是如此。

如果您真的想使用动态值,您可以手动创建一个映射公开环境常量的对象并使用它来代替 process.env

Here is an example:

// utils/config.js

export default {
  TEST: process.env.NEXT_PUBLIC_TEST
};
// pages/index.js

import config from "../utils/config";

const test = "TEST";
console.log(config[test]);

const IndexPage = () => <div>Hello World</div>;
export default IndexPage;

【讨论】:

  • 干杯,很遗憾它是这样的。 Create React App 在不破坏对象的情况下实现了相同级别的安全性(只允许前缀 env 变量通过)
  • @bdmason 您可以尝试自己创建一个对象来映射所有公共环境并使用它来代替process.env
  • @bcr-dd 我看到这是一种配置方式,但我希望它被 gitignored。似乎也有一种针对每个环境进行设置的方法,对于我的项目来说,这可能是最好的解决方案,因为客户端环境变量从来都不是秘密,它可以节省我们所有人传递环境变量文件的时间。感谢您的帮助
猜你喜欢
  • 2020-11-25
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多