【问题标题】:gatsby-source-contentful options error on build构建时 gatsby-source-contentful 选项错误
【发布时间】:2020-10-05 21:03:22
【问题描述】:

前段时间我用 Gatsby 创建了一个网站,并且我在我的页面上使用了静态降价。 现在我想把我所有的帖子移到 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 变量写为字符串,那么构建确实会在本地运行,这让我相信它会在部署时运行。

【问题讨论】:

    标签: deployment gatsby netlify contentful


    【解决方案1】:

    您必须在 Netlify 中使用 GATSBY_ 前缀设置您的 .env 变量。因此,您的 CONTENTFUL_ID 变量将是 GATSBY_CONTENTFUL_ID

    建议在本地和构建环境中使用相同的命名,以保持它们之间的逻辑。因此,您还需要在本地环境中使用 GATSBY_ 为所有对 .env 的引用添加前缀。为此,如果您之前没有设置过.env.development.env.production,您可能需要创建它。

    您可以在Netlify documentation查看更多信息:

    Gatsby 环境变量

    任何以GATSBY_ 为前缀的环境变量都会被处理 Gatsby 并在浏览器中提供客户端 JavaScript 使用权。访问有关环境变量的 Gatsby 文档了解更多信息 信息。

    以及Gatsby's documentation

    【讨论】:

    • 在进行这些更改后,它仍然给我同样的错误,即 spaceId 和 accessToken 未定义,无论是在本地还是在部署时。为清楚起见,我确实将我的 CONTENTFUL_SPACE_ID 编辑为 GATSBY_CONTENTFUL_SPACE_ID 尝试不/并将代码中的引用更改为 env.GAT.. 但似乎没有任何改变
    • 尝试触发手动部署清理缓存。另外,只是为了安慰。你gatsby-config.js 有正确的变量,不是吗?
    • 多次尝试以这种方式触发部署,但没有解决问题。另外,是的,我可以确认gatsby-config.jsprocess.env.CONTENTFUL_SPACE_ID,等等。
    • process.env.CONTENTFUL_SPACE_ID 更改为process.env.GATSBY_CONTENTFUL_SPACE_ID
    • 所有环境变量必须具有相同的命名。在 Netlify 中设置它们后,您需要在本地进行更改。如果你的.env.development有没有GATSBY_前缀的变量,当然会失败。
    【解决方案2】:

    在多次尝试调试我的代码并安装以前版本的gatsby-source-contentful 之后,我发现如果contentful 上没有Media,你会收到错误消息。 要修复任何类似错误,您只需在 contentful 本身上添加一个虚拟媒体,它就可以正常工作。

    【讨论】:

      【解决方案3】:

      在环境变量.env.development中需要添加

      CONTENTFUL_SPACE_ID = <Paste here your space Id>
      CONTENTFUL_ACCESS_TOKEN = <Paste here your delivery API - access token>
      

      【讨论】:

        猜你喜欢
        • 2021-06-11
        • 2018-07-14
        • 2020-03-20
        • 1970-01-01
        • 2021-08-27
        • 2019-11-28
        • 2019-09-25
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多