Я использую node
v16.0.0, Gatsby
v3.6.1 и Yarn
v1.22.10 в качестве диспетчера зависимостей с плагинами:
- gatsby-source-apiserver v2.1.8.
- gatsby-plugin-image v1.4.0 .
Я использовал следующую функцию в файле gatsby-node.js
для создания узлов в GraphQL с изображениями, которые можно запросить позже:
// gatsby-node.js
const { createRemoteFileNode } = module.require(`gatsby-source-filesystem`)
exports.onCreateNode = async ({ node,
actions: { createNode },
store,
cache,
createNodeId,
}) => {
if (node.internal.type === `API__images` && node.pk) {
let fileNode = await createRemoteFileNode({
url: node.url, // string that points to the URL of the image
parentNodeId: node.id, // id of the parent node of the fileNode you are going to create
createNode, // helper function in gatsby-node to generate the node
createNodeId, // helper function in gatsby-node to generate the node
cache, // Gatsby's cache
store, // Gatsby's Redux store
})
// if the file was created, attach the new node to the parent node
if (fileNode) {
node.image___NODE = fileNode.id
}
}
}
Кажется, что это нормально работает при запуске gatsby develop
или gatsby build
, но если я попытаюсь снова запустить любую из этих команд (с теми же исходными данными), возникает следующая ошибка:
Missing onError handler for invocation 'building-schema',
error was Invariant Violation: Encountered an error
trying to infer a GraphQL type for: `image___NODE`.
There is no corresponding node with the `id` field matching:
"27564a59-be49-51fb-98d6-c32de4f2030c",
"379357c0-1faa-5177-806d-7f155f2e3e85",
...
Эти 27564a59-b..
, 379357c0-1..
- это идентификаторы узлов изображения, которые были созданы функцией gatsby-node.js
.
Если я запустил gatsby clean
, он будет работать нормально, но использование gatsby clean - не лучшее решение, потому что очистка кеша нарушит инкрементные сборки.
Кто-нибудь знает, как исправить эту ошибку? я должен использовать фиксированные идентификаторы для узлов?
Ошибка трассировки:
(/my-project/node_modules/invariant/invariant.js:40:15)
at getFieldConfigFromFieldNameConvention (/my-project/node_modules
/gatsby/src/schema/infer/add-inferred-fields.js:227:3)
at getFieldConfig (/my-project/node_modules/gatsby/src/schema/infe
r/add-inferred-fields.js:129:19)
at forEach (/my-project/node_modules/gatsby/src/schema/infer/add-i
nferred-fields.js:79:25)
at Array.forEach (<anonymous>)
at addInferredFieldsImpl (/my-project/node_modules/gatsby/src/sche
ma/infer/add-inferred-fields.js:63:28)
at addInferredFields (/my-project/node_modules/gatsby/src/schema/i
nfer/add-inferred-fields.js:27:3)
at addInferredType
(/my-project/node_modules/gatsby/src/schema/infer/index.js:101:3)
at map
(/my-project/node_modules/gatsby/src/schema/infer/index.js:65:5)
at Array.map (<anonymous>)
at addInferredTypes
(/my-project/node_modules/gatsby/src/schema/infer/index.js:64:23)
at updateSchemaComposer
(/my-project/node_modules/gatsby/src/schema/schema.js:169:9)
at buildSchema
(/my-project/node_modules/gatsby/src/schema/schema.js:64:3)
at build
(/my-project/node_modules/gatsby/src/schema/index.js:105:18)
at buildSchema
(/my-project/node_modules/gatsby/src/services/build-schema.ts:19:3)'
createNodeId: id => Image${node.pk}
, но все равно выдает инвариантную ошибку. - person Ander   schedule 21.06.2021