yen*_*yen 5 environment-variables server-side-rendering next.js
我现在才意识到这里的nextjs 环境变量的行为,这与通常设置 NodeJS 应用程序的方式不同:
注意:.env 文件应包含在您的存储库中,而 .env*.local 应包含在 .gitignore 中,因为这些文件将被忽略。将 .local 文件视为保存机密的好地方,将非本地文件视为保存默认值的好地方。
因此,我正在考虑限制自己使用仅在构建时可用的秘密,以便在“后端”/api
路由中使用。
但是/api
路由的行为是否像真正的后端一样?由于 nextjs仅在必须时才是 SSR (?),我认为此 /api 代码也可能最终出现在浏览器中,从而暴露秘密?有没有办法强制代码仅在服务器端运行而不在浏览器中运行?我对 SSR 概念很陌生。我的“真正的”后端暂时不会启动。这不是一个非常重要的秘密,但仍然如此。谢谢。
API 路由最终不会出现在客户端捆绑包中,因此您输入的任何代码都/pages/api
将对用户隐藏。这些路由旨在专门在服务器环境上运行。
相同的概念适用于getStaticProps
仅在构建期间在服务器上运行的情况。
NextJS 有一种称为“内联环境变量”的机制。对以 开头的环境变量的任何引用都NEXT_PUBLIC_
将自动替换为其值。因此,如果您的本地/构建/生产计算机设置了变量NEXT_PUBLIC_APPNAME
,NextJS 会将引用替换process.env.NEXT_PUBLIC_APPNAME
为变量的值。
或者,您可以在.env
文件中定义变量。这些也将被您的应用程序使用,并且如果您在客户端上呈现的任何代码中引用它们(如 参考资料中的 JSX pages/about.js
),它们最终可能会出现在您的客户端包中。
结论:秘密应该添加到.env
,并且只能在服务器端代码(如 API 路由和 )中引用getStaticProps
。
您可能也对此工具感兴趣: https: //next-code-elimination.vercel.app/
它可以让您验证服务器端代码是否位于客户端捆绑包之外。
归档时间: |
|
查看次数: |
2438 次 |
最近记录: |