在Netlify函数中设置环境变量的正确方法是什么?

时间:2019-07-28 02:01:00

标签: javascript node.js lambda gatsby netlify

在netlify中设置环境变量的正确方法是什么?我希望能够根据环境为变量设置不同的值。

伪代码:

let host;
if (process.env.GATSBY_CUSTOM_CONTEXT === 'production') {
    host = process.env.PRODUCTION_HOST
} else if (process.env.GATSBY_CUSTOM_CONTEXT === 'development') {
    host = process.env.DEVELOPMENT_HOST
}

我尝试过通过CLI传递环境变量,例如GATSBY_CUSTOM_CONTEXT=production gatsby build,并且还尝试对cross-env使用相同的命令。

我的其他尝试使用了netlify.toml

[build]
  base = "/"
  publish = "public"
  command = "yarn build"
  functions = "src/functions"

[context.production]
  [context.production.environment]
    GATSBY_CUSTOM_CONTEXT = "production"

所有这些选项均在本地与netlify dev一起使用,但在生产环境中GATSBY_CUSTOM_CONTEXT始终为undefined

2 个答案:

答案 0 :(得分:1)

您无法在Netlify函数中解析环境变量的原因是在您提出问题时, Netlify不会从netlify.toml文件中传输环境变量。

您必须将它们放入app.netlify.com信息中心的网站设置中的管理面板中。

答案 1 :(得分:0)

不幸的是,您正在寻找的内容目前似乎不受支持。尽管它们提供了另一种方法。

我在他们的文档中找到了以下代码段:

  

调用环境变量

     

直接将环境变量用作   您的netlify.toml文件中的值($ VARIABLENAME)不支持。   但是,以下工作流程可用于替换值   假设您只是具有环境变量值的文件   尝试更改标题或重定向。读取文件的其余部分   构建之前-但是构建之后会阅读这些部分   过程。

     
      
  1. 在netlify.toml重定向或标题部分的某处添加一个占位符,例如HEADER_PLACEHOLDER。
  2.   
  3. 创建一个具有所需值的环境变量,例如PROD_API_LOCATION。您可以在   toml文件或在我们的UI中。您可以使用后者保持敏感   值从存储库中移出。
  4.   
  5. 将替换命令添加到您的build命令中。这是一个使用yarn build构建站点的示例:sed -i   s / HEADER_PLACEHOLDER / $ {PROD_API_LOCATION} / g netlify.toml && yarn build
  6.   

从这里拍摄:https://www.netlify.com/docs/netlify-toml-reference/