有用的链接:
Retrieving metafields with the Storefront API
Shopify GraphQL Admin API
Shopify GraphQL Storefront API
最近,Shopify发布了一种retrieving metafields with the Storefront API
的方法。
为了获得对来自Shopify GraphQL Storefront API的元字段的读取访问权限,我们必须将来自Shopify GraphQL Admin API的元字段列入白名单。
我创建了2个本地插件:gatsby-source-shopify-metafields
,它使用graphql-request
到产品上确切的元字段的updateMetafieldStorefrontVisibility
。要运行updateMetafieldStorefrontVisibility
变异,请执行cd plugins/gatsby-source-shopify-metafields && node lib.js
。gatsby-source-shopify
是default gatsby-source-shopify
插件的更新版本,其中包含编辑后的queries.js
,nodes.js
和gatsby-node.js
文件,以包括新可用的metafields
字段。
运行updateMetafieldStorefrontVisibility
之后,我可以使用curl
查询产品元字段:
curl -X POST \
"https://shop-name.myshopify.com/api/graphql.json" \
-H "Content-Type: application/graphql" \
-H "X-Shopify-Storefront-Access-Token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-d '
query {
productByHandle(handle: "nike-air-max-720") {
metafield(namespace: "global", key: "free_shipping") {
value
}
}
}
'
响应:
{"data":{"productByHandle":{"metafield":{"value":"true"}}}}
要重现该错误,请克隆this repo
在
gatsby develop
上出现Invariant Violation: Encountered an error trying to infer a GraphQL type
错误:gatsby develop
success open and validate gatsby-configs — 0.004 s
success load plugins — 0.368 s
success onPreInit — 0.006 s
success initialize cache — 0.094 s
success copy gatsby files — 0.045 s
success onPreBootstrap — 0.006 s
gatsby-source-shopify/new-dev-sandbox starting to fetch data from Shopify
gatsby-source-shopify/new-dev-sandbox fetched and processed blogs: 274.471ms
gatsby-source-shopify/new-dev-sandbox fetched and processed policies: 278.416ms
gatsby-source-shopify/new-dev-sandbox fetched and processed productTypes: 406.051ms
gatsby-source-shopify/new-dev-sandbox fetched and processed articles: 641.547ms
gatsby-source-shopify/new-dev-sandbox fetched and processed collections: 754.319ms
gatsby-source-shopify/new-dev-sandbox fetched and processed products: 1832.663ms
gatsby-source-shopify/new-dev-sandbox finished fetching data from Shopify: 1848.663ms
success source and transform nodes — 1.903 s
warning Multiple node fields resolve to the same GraphQL field `ShopifyCollection.products` - [`products`, `products___NODE`]. Gatsby will use `products___NODE`.
warning Multiple node fields resolve to the same GraphQL field `ShopifyProduct.metafields` - [`metafields`, `metafields___NODE`]. Gatsby will use `metafields___NODE`.
error UNHANDLED REJECTION
Error: Invariant Violation: Encountered an error trying to infer a GraphQL type for: `metafields___ NODE`. There is no corresponding node with the `id` field matching: "Shopify__ProductMetafield__und efined,Shopify__ProductMetafield__undefined,Shopify__ProductMetafield__undefined,Shopify__ProductMe tafield__undefined".
- invariant.js:40 invariant
[gatsby-shopify-invariant-violation-example]/[invariant]/invariant.js:40:15
- add-inferred-fields.js:259 getFieldConfigFromFieldNameConvention
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/add-inferred-fields.js:25 9:3
- add-inferred-fields.js:161 getFieldConfig
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/add-inferred-fields.js:16 1:19
- add-inferred-fields.js:87 Object.keys.forEach.key
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/add-inferred-fields.js:87 :25
- Array.forEach
- add-inferred-fields.js:74 addInferredFieldsImpl
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/add-inferred-fields.js:74 :28
- add-inferred-fields.js:38 addInferredFields
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/add-inferred-fields.js:38 :3
- index.js:98 addInferredType
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/index.js:98:3
- index.js:64 typesToInfer.map.typeComposer
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/index.js:64:43
- Array.map
- index.js:64 addInferredTypes
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/infer/index.js:64:23
- schema.js:140
[gatsby-shopify-invariant-violation-example]/[gatsby]/dist/schema/schema.js:140:11
- Generator.next
环境
盖茨比
v2.5.2
节点
v11.14.0
文件内容
gatsby-config.js
:require('dotenv').config({
path: `.env.${process.env.NODE_ENV}`
});
module.exports = {
siteMetadata: {
title: `Gatsby Default Starter`,
description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
author: `@gatsbyjs`,
},
plugins: [
`gatsby-plugin-react-helmet`,
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/images`,
},
},
`gatsby-transformer-sharp`,
`gatsby-plugin-sharp`,
{
resolve: 'gatsby-source-shopify',
options: {
shopName: `${process.env.SHOPIFY_SHOP_NAME}`,
accessToken: `${process.env.SHOPIFY_STOREFRONT_ACCESS_TOKEN}`,
verbose: true
}
},
{
resolve: `gatsby-plugin-manifest`,
options: {
name: `gatsby-starter-default`,
short_name: `starter`,
start_url: `/`,
background_color: `#663399`,
theme_color: `#663399`,
display: `minimal-ui`,
icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
},
},
// this (optional) plugin enables Progressive Web App + Offline functionality
// To learn more, visit: https://gatsby.dev/offline
// `gatsby-plugin-offline`,
],
}
我期望得到干净的版本,相反,我得到
Invariant Violation: Encountered an error trying to infer a GraphQL type
最佳答案
运行加斯比清洁。这是缓存文件中的节点引用错误
关于javascript - GatsbyJS永久违反:尝试推断GraphQL类型时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56226824/