我在玩gatsby(静态网站生成器)。
我创建了一个.env
文件并安装了所需的dotenv
软件包。
在配置文件中,我输入以下代码:
require("dotenv").config({path:`.env.${process.env.NODE_ENV}`,})
当env
加载到前端时,如何在控制台中使用console.log
测试gatsby develop
变量?
我在Visual Studio代码和PowerShell命令行中的Windows系统上工作。尽管我在Windows的环境变量中设置了ENV_NODE
参数
console.log
命令可以直接在配置文件或前端文件(如index.js
)中使用。但这很奇怪,因为不带GATSBY
的变量(如文档中所述)在前端工作。
为什么?
答案 0 :(得分:1)
要直接在浏览器中访问环境变量,应按their documentation about environment variables的说明为它们加上GATSBY_
前缀:
在Node中,您的站点可以使用以下命令访问
API_KEY
(服务器端) 标识符process.env.API_KEY
。要在客户端访问它,您可以使用 包含.env.*
的{{1}}文件。但是,建议您强烈 避免将这些文件签入源代码管理,因为这是安全的 公开API密钥的问题。作为更安全的选择,您可以 为变量加上API_KEY
前缀(如上所示)。有了这个前缀, Gatsby将变量自动嵌入为GATSBY_
*到 编译的JS,使其可以在浏览器上下文中使用,而无需 暴露在其他地方。
放置在编译时运行的文件中的process.env.GATSBY\_\
中未前缀的变量(console.logs()
等)不会在浏览器的控制台中显示,因为那些gatsby-config.js
在服务器中运行(您的本地计算机)。如果在其中放置console.logs
,它将在终端(VSCode终端,Powershell终端等)中可见,但在浏览器中不可见。它们是服务器端变量。
由于console.log
是保留的环境变量,因此您不能给它们加上前缀,因此将无法在浏览器的控制台中显示它。扩展their documentation:
您不能覆盖某些环境变量,因为使用了某些环境变量 在内部进行优化,例如:
NODE_ENV
NODE_ENV
总结一下,要在客户端测试变量(例如PUBLIC_DIR
),您需要在变量前加上index.js
,并在控制台中打印(如果需要)。它可能在GATSBY_
下工作,但如果没有,可能会在develop
模式下引起严重的问题。服务器端的输出将是终端,而不是浏览器的控制台。
在服务器端(build
等)中编译期间执行的文件也将在终端而不是浏览器的控制台中输出。客户端变量的反义词,将在浏览器的控制台中输出。谁来呈现变量,服务器还是客户端就可以了。