如何在gatsby服务(节点)运行时发出console.log命令

时间:2020-07-19 13:33:49

标签: node.js gatsby

我在玩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的变量(如文档中所述)在前端工作。 为什么?

1 个答案:

答案 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等)中编译期间执行的文件也将在终端而不是浏览器的控制台中输出。客户端变量的反义词,将在浏览器的控制台中输出。谁来呈现变量,服务器还是客户端就可以了。