Gatsby build命令运行时contentful插件无法从.env读取spaceId与accessToken求助
解决方案
1. 解决build时环境变量读取失败问题
Gatsby默认的环境变量加载规则为:
- 执行
gatsby develop时,自动加载根目录下的.env.development文件 - 执行
gatsby build时,自动加载根目录下的.env.production文件
默认不会读取你创建的通用.env文件,这是第一次报错的核心原因,可二选一解决:
- 方案一:将
.env中的配置内容分别复制到.env.development和.env.production两个文件中,两份文件的变量名保持一致 - 方案二:在
gatsby-config.js文件最顶部手动加载通用.env文件,添加以下代码:
require('dotenv').config({ path: `.env` })
Gatsby内置dotenv依赖,无需额外安装。
你可以在gatsby-config.js中添加一行打印代码验证变量是否加载成功:
console.log('CONTENTFUL_SPACE_ID:', process.env.CONTENTFUL_SPACE_ID) console.log('CONTENTFUL_ACCESS_TOKEN:', process.env.CONTENTFUL_ACCESS_TOKEN)
执行gatsby build时如果能正常打印出你配置的值,说明变量加载成功。
2. 解决Contentful访问权限报错问题
你新增.env.production后出现的权限报错,常见原因和解决方法如下:
- 令牌类型错误:Contentful提供两种API令牌,
预览令牌仅支持本地开发预览未发布内容,交付令牌才用于生产环境构建读取已发布内容,请确认你填写到.env.production的是Content Delivery API 交付令牌,不是预览令牌 - 环境配置不匹配:如果你Contentful空间内使用的不是默认
master环境,需要在插件配置中新增environment参数指定你实际使用的环境:
resolve: 'gatsby-source-contentful', options: { spaceId: process.env.CONTENTFUL_SPACE_ID, accessToken: process.env.CONTENTFUL_ACCESS_TOKEN, environment: process.env.CONTENTFUL_ENV || 'master' }
- 配置值错误:核对
.env.production中的spaceId、accessToken是否和Contentful后台「设置-API密钥」页面对应的值完全一致,不要有多余的空格、引号或者换行符。
内容的提问来源于stack exchange,提问作者user14593966
相关产品推荐
相关产品推荐

