动态访问nextjs中的环境变量不起作用

pxyaymoc  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(539)

我无法在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应用程序中尝试了相同的方法:


# .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 .

bbuxkriu

bbuxkriu1#

根据官方文件:
注意:为了确保仅服务器机密的安全,next.js替换 process.env.* 在构建时使用正确的值。这意味着 process.env 不是标准的javascript对象。
因此,您试图做的只有在开发模式下才可能,在服务器端代码中也是如此。
您可以手动创建Map公开环境常量的对象,并使用它而不是 process.env 如果您确实想使用动态值。
以下是一个例子:

// 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;

相关问题