根据Next.js关于环境变量的文档:
默认情况下,环境变量只在Node.js环境中可用,这意味着它们不会暴露给浏览器。
为了向浏览器公开变量,必须在变量前面加上NEXT_PUBLIC_前缀。例如:
NEXT_PUBLIC_ANALYTICS_ID=abcdefghijk
避免环境变量暴露不就是重点吗?使用NEXT_PUBLIC_
安全吗?不希望页面访问者访问的秘密,例如API密钥?
文档继续说变量是在构建时加载的,但没有解释是否有人可以在项目部署后从浏览器访问它们。
以NEXT_PUBLIC_
开头的env变量值被内联到代码中。变量名将被实际值替换,并且该值在检查chrome开发工具时暴露给用户。
在我看来,环境变量的意义在于根据不同的环境有不同的值。如果实现正确,安全性是你可以得到的。
在next.js
的情况下,您可以选择使用不以NEXT_PUBLIC_
开始的服务器端环境变量。如果你真的想保护你的密钥,只把它们保存在服务器端运行的代码中,比如getServerSideProps
、middleware
等。
示例:您想要进行API调用,只需调用next.jsAPI
(另一个服务器端功能)并从那里执行实际的API调用。这样你的API_KEY
就得到了保护。