一段时间以前,我在Gatsby上做了一个网站,并且我在页面上使用了静态markdown。 现在,我想将我所有的帖子都放在Contentful上,并且一切在开发中都可以正常工作。 当我继续使用Netlify部署我的网站时,它给我带来了一个错误。 我一直在寻找解决方案,但尚未找到解决方案。 我尝试在本地运行该版本,这引发了我这个错误,因此,我相信我需要在部署之前首先解决此问题。
ERROR
Problems with gatsby-source-contentful plugin options:
spaceId: undefined - "spaceId" is required
accessToken: undefined - "accessToken" is required
host (default value): "cdn.contentful.com"
environment (default value): "master"
downloadLocal (default value): false
localeFilter (default value): [Function]
forceFullSync (default value): false
pageLimit (default value): 100
useNameForId (default value): true
not finished onPreBootstrap - 0.056s
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! gatsby-starter-hello-world@0.1.0 build: `gatsby build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the gatsby-starter-hello-world@0.1.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\user\AppData\Roaming\npm-cache\_logs\2020-05-13T15_20_35_160Z-debug.log
显然,它不读取.env变量。我确实在Netlify上设置了变量,正如我之前在开发中所说的那样,它工作得很好,不会引发任何类型的错误。
我以前没有安装过'dotenv'并尝试安装它,但没有解决问题。 我确实只有一个“ .env”文件,但是试图制作“ .env.development”和“ .env.production”文件,但是没有用。
如何解决此问题? 另外,我确实会在Netlify上遇到一些错误,例如
error There was an error in your GraphQL query:
Unknown type "ContentfulFluid".
但是我不认为它们会导致构建失败。
编辑: 我应该补充一点,如果我确实将.env变量写为字符串,则该构建确实会在本地运行,这使我相信它会在部署时完成。
答案 0 :(得分:2)
您必须在Netlify中使用.env
前缀设置GATSBY_
变量。因此,您的CONTENTFUL_ID
变量将为GATSBY_CONTENTFUL_ID
。
建议在本地和构建环境中使用相同的命名,以保持它们之间的逻辑。因此,您还需要在本地环境中使用.env
在对GATSBY_
的所有引用前面加上前缀。为此,如果以前没有设置,可能需要创建一个.env.development
和.env.production
。
您可以在Netlify documentation中查看更多信息:
Gatsby环境变量
任何以
GATSBY_
为前缀的环境变量都将由 Gatsby,并在浏览器中提供了客户端JavaScript 访问。有关环境变量的更多信息,请访问Gatsby文档 信息。
以及Gatsby's documentation中的内容。
答案 1 :(得分:1)
经过多次尝试调试我的代码并安装gatsby-source-contentful
的早期版本后,我发现如果Media
上没有contentful
,则会出现错误。
要解决任何类似的错误,您需要做的就是在contentful
本身上添加一个虚拟介质,它会很好地工作。
答案 2 :(得分:1)
您需要在环境变量 .env.development 中添加
CONTENTFUL_SPACE_ID = <Paste here your space Id>
CONTENTFUL_ACCESS_TOKEN = <Paste here your delivery API - access token>