实现此目的的最佳(也是几乎唯一)方法是为每个站点/别名使用环境变量,并配置部署命令以触发和使用每个站点的变量。这样,每次部署都会从每个 Contentful 环境中获取数据。
在您的gatsby-config.js
(模块导出上方)中添加:
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
下一步是为每个别名创建一个环境文件。在您的项目根目录中:
每个文件都应该包含来自 Contentful 的环境变量:
CONTENTFUL_ACCESS_TOKEN:12345
CONTENTFUL_SPACE_ID:12345
然后,您gatsby-config.js
只需将硬编码的变量替换为环境文件中的变量:
{
resolve: `gatsby-source-contentful`,
options: {
spaceId: process.env.CONTENTFUL_SPACE_ID,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
},
},
最后一步是配置部署脚本以触发每个所需的别名。在你的package.json
:
"scripts": {
"clean": "gatsby clean",
"test": "jest",
"format": "prettier --write \"**/*.{js,jsx,json,md}\""
"develop-alias1": "gatsby develop GATSBY_ACTIVE_ENV=alias1"
"build-alias1": "gatsby build GATSBY_ACTIVE_ENV=alias1"
"develop-alias2": "gatsby develop GATSBY_ACTIVE_ENV=alias2"
"build-alias2": "gatsby build GATSBY_ACTIVE_ENV=alias2"
},
请注意,您将替换默认命令gatsby develop
和gatsby build
别名命令。
通过添加这组配置,对于每个develop
或build
/deploy,您都在告诉您的 Gatsby 项目应该查看哪个环境文件(它将.env.alias*
取而代之)。每个文件将包含 Contentful 中每个环境的密钥,其中包含不同的内容,允许您使用唯一的 CMS 部署具有不同内容的别名站点。