我正在用Next.js编写一个网站,我试图添加谷歌标签管理器。
我遵循了Next.js Github示例的教程,但由于某些原因,我无法访问环境变量。
它说我的变量是undefined。
我在我的项目文件夹中创建了一个文件. env.local(与components、node_modules、pages等处于同一级别)
在这个文件中,我创建了一个像这样的变量(测试目的):
NEXT_PUBLIC_DB_HOST=localhost
在我的索引页上,我尝试了以下代码:
console.log("test ", process.env.NEXT_PUBLIC_DB_HOST);
但是在我的控制台中,我得到了一个“测试未定义”。
我尝试将变量放入.env文件,但没有成功。
我做错了什么?
9条答案
按热度按时间fnx2tebb1#
这个envs只在服务器端工作。要在客户端访问这个envs,需要在next.config.js中声明
这样的话:
gpnt7bae2#
1.创建**.env(所有环境)、.env.development**(开发环境)和**.env.production**(生产环境)。
1.将前缀NEXT_PUBLIC添加到所有环境变量中。
NEXT_PUBLIC_API_URL=http://localhost:3000/
1.与前缀process.env一起使用
process.env.NEXT_PUBLIC_API_URL
1.停止服务器并重新启动:
npm运行开发
1.我希望它能起作用。这个解决方案的最新版本的nextJs(以上9)
5ssjco0h3#
重新启动服务器对我很有用。
1.编辑并保存.env.local
1.停止服务器并重新启动,
npm run dev
1.你应该在下一行得到如下输出:
6ljaweal4#
对于那些使用NextJS +9并在浏览器中查找环境变量的用户,您应该使用
NEXT_PUBLIC_
前缀。示例:参考文档。
2ekbmq325#
在花了无数个小时之后,我发现在nextjs 9.4的pre和post文档中都有一个很小的段落:
Next.js将在构建时将process.env.customKey替换为'my-value'。
为了保证仅服务器机密的安全,Next.js在构建时将process.env.* 替换为正确的值。
关键字为BUILD TIME。这意味着您必须在运行
next build
时设置这些变量,而不是(仅)在next start
时设置这些变量,以便客户端访问这些变量。rseugnpd6#
这是我的next.config.js文件。
重新启动服务器,运行正常。使用Nextjs 12.1.0和typescript
rmbxnbpk7#
在我的例子中,我粘贴REACT_APP_API_URL而不是NEXT_PUBLIC_API_URL。
bhmjp9jg8#
在此基础上添加最新版本的documentation,v12+。
使用next.config.js文件,您可以指定服务器和客户端变量:
您仍然可以使用env.local文件,并将变量传递到next.config.js文件中。例如:
然后你可以像这样访问变量:
mnemlml89#
对于视频参考codegrepper链接https://www.grepper.com/answers/564562/process.env+in+nextjs?ucard=1
进程.env只能在服务器上工作,不能在浏览器上工作,所以它将显示undefined以修复它使用NEXT_PUBLIC_before API key in .env.local or .env这个解决方案只能从版本9的nextjs工作。
NEXT_PUBLIC_BACKEND_API=“http://localhost:1337/graphql”
像MongoURl和openAi密钥这样的秘密环境不应该使用Next_PUBLIC_,否则它会暴露给浏览器,每个人都可以使用它。
MONGO_URL=
OPENAI_API_KEY=