javascript - 在 Gatsby 中设置环境变量

标签 javascript node.js environment-variables contentful gatsby

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

我遵循的步骤:

1) 安装dotenv@4.0.0

2) 在根文件夹中创建两个文件:“.env.development”和“.env.production”

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 Projects\Gatsby\sebhewelt.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:附加问题 - 正如这让我想到的,我知道我不应该将密码和 token 放在 github 上,但是当 netlify 从 github 构建时,还有其他安全的方法吗?

最佳答案

我有一个类似的问题,我在根“.env.development”和“.env.production”中创建了 2 个文件,但仍然无法访问 env 文件变量 - 它在我的 gatsby-config 中返回未定义.js 文件。

通过 npm 安装 dotenv 并执行此操作使其工作:

1) 当运行 gatsby develop process.env.NODE_ENV 时返回未定义,但是当运行 gatsby build 时它返回 'production' 所以我在这里定义它:

let env = process.env.NODE_ENV || 'development';

2)然后我使用了dotenv但是根据process.env.NODE_ENV指定了文件路径

require('dotenv').config({path: `./.env.${env}`}); 

3) 然后你可以访问你的配置变量:

module.exports = {
siteMetadata: {
    title: `Gatsby Default Starter`,
},
plugins: [
    `gatsby-plugin-react-helmet`,
    {
      resolve: `gatsby-source-contentful`,
      options: {
        spaceId: `${process.env.CONTENTFUL_ID}`,
        accessToken: `${process.env.CONTENTFUL_TOKEN}`,
        },
    },
],
}

关于javascript - 在 Gatsby 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086881/

相关文章:

javascript - 从 javascript 形式解析到数据库

javascript - 使用nodejs和expressjs : What's a good way of passing . env到html而不使用模板?

macos - Mac OS X 中的环境变量

node.js - Visual Studio 2017 使用 Mocha

node.js - dotenv模块的意义

php - jQuery 和返回的 HTML

javascript - 在管道传输到 gulp browserify 期间如何获得错误通知?

java - 为时间有效性构建网络应用程序 : Rails, Django、Node 或替代方案

node.js - Nodejs中的cursorTo有什么用?

node.js - 在 graphql-yoga 中定义 Mutation 参数