在Gatsby中设置环境变量

我使用了此教程:https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/environment-variables.md

我遵循的步骤:

1)安装dotenv@4.0.0

2)在根文件夹中创建".env.Development"和".env.Products"两个文件

3)"按照他们的设置说明操作"(dotenv NPM文档上的示例)

gatsby-config.js中:

const fs = require('fs');
const dotenv = require('dotenv');
const envConfig = 
dotenv.parse(fs.readFileSync(`.env.${process.env.NODE_ENV}`));
for (var k in envConfig) {
  process.env[k] = envConfig[k];
}

遗憾的是,当我运行gatsby develop时,NODE_ENV尚未设置:

error Could not load gatsby-config


  Error: ENOENT: no such file or directory, open 'E:Front-End ProjectsGatsbysebhewelt.com.env.undefined'

当我手动设置它时,它起作用:

dotenv.parse(fs.readFileSync(`.env.development`));

我需要Gatsby-CONFIG中的环境变量,因为我将敏感数据放在此文件中:

  {
      resolve: `gatsby-source-contentful`,
      options: {
        spaceId: envConfig.CONTENTFUL_SPACE_ID,
        accessToken: envConfig.CONTENTFUL_ACCESS_TOKEN
      }
    }

如何使其工作?

PS:额外的问题-这让我思考,我知道我不应该在GitHub上放置密码和令牌,但由于netlify是从GitHub构建的,还有其他安全的方法吗?


解决方案

您应该只在愿意将环境文件签入GIT时才使用这些文件。对于密码/令牌等,请将其添加到Netlify或您通过其仪表板使用的任何构建工具。

您可以通过process.env.ENV_VARIABLE在Gatsby-config.js和amp;Gatsby-node.js中访问这些内容。

但是,您不能在浏览器中访问以这种方式添加的环境变量。为此,您需要使用.env.development&;.env.production

相关文章