繁体   English   中英

在 Gatsby 中设置环境变量

[英]Setting environment variables in 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 docs上的示例)

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 developNODE_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:附加问题 - 这让我想到,我知道我不应该把密码和令牌放在 github 上,但是当 netlify 从 github 构建时,还有其他安全的方法吗?

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

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

1) 当运行gatsby develop process.env.NODE_ENV 时返回 undefined,但是当运行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}`,
        },
    },
],
}

您应该只在您愿意将它们检查到 git 中时才使用 env 文件。 对于密码/令牌/等。 将它们添加到 Netlify 或您通过其仪表板使用的任何构建工具。

您可以通过process.env.ENV_VARIABLE在 gatsby-config.js 和 gatsby-node.js 中访问这些。

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

经过一番搜索,发现可以通过netlify网站设置环境变量,步骤如下:

  1. 在你自己的netlify控制台平台下,请到settings
  2. 选择构建和部署选项卡(可以在侧边栏上找到)
  3. 选择环境子选项卡选项
  4. 单击编辑变量并添加/放入您的凭据
  5. 完成!

我真的不喜欢.env.production文件模式,我们的构建系统设置并使用 env 变量,并且有额外的构建步骤将它们写入文件很奇怪。 但是 Gatsby 只将 env vars 的GATSBY_列入白名单,没有明显的方法添加你自己的。

但是这样做并不难,您可以通过在gatsby-node.js文件中添加类似的gatsby-node.js

exports.onCreateWebpackConfig = ({ actions, getConfig }) => {
    const config = getConfig();

    // Allow process.env.MY_WHITELIST_PREFIX_* environment variables
    const definePlugin = config.plugins.find(p => p.definitions);
    for (const [k, v] of Object.entries(process.env)) {
        if (k.startsWith("MY_WHITELIST_PREFIX_")) {
            definePlugin.definitions[`process.env.${k}`] = JSON.stringify(v);
        }
    }

    actions.replaceWebpackConfig(config);
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM