可能您现在已经找到了解决方案。
如果没有,我可以让远程图像与 gatsby-image 一起使用。我也尝试过gatsby-plugin-remote-images
,但无法让它工作。我的工作是为我的远程 API(我的远程 cms 源gatsby-source-graphql
,我使用 Webiny CMS)创建一个解析器,如下所示:
在gatsby-config.js
:
plugins: [
{
resolve: 'gatsby-source-filesystem',
options: {
name: 'images',
path: '${__dirname}/src/images',
},
},
{
resolve: 'gatsby-source-graphql',
options: {
typeName: "Webiny",
fieldName: "webinyHeadlessCms",
url: "https://XXXXXXXXXXX.cloudfront.net/cms/read/production",
headers: {
authorization: "XXXXXXXXXXXXXXXXXXXX"
},
refetchInterval: 60,
},
},
],
我的gatsby-node.js
:
const { createRemoteFileNode } = require(`gatsby-source-filesystem`)
exports.createResolvers = ({actions,cache,createNodeId,createResolvers,store,reporter,}) => {
const { createNode } = actions
createResolvers({
Webiny_BlogPost: {
imageFile: {
type: `File`,
resolve(source, args, context, info) {
return createRemoteFileNode({
url: source.headerImage,
store,
cache,
createNode,
createNodeId,
reporter,
})
},
},
},
})
}
现在我可以像这样查询要与 gatsby-image 一起使用的图像:
export const query = graphql`{
webinyHeadlessCms {
listBlogPosts {
data {
headerImage
imageFile {
childImageSharp {
fluid (quality: 100, maxWidth: 1920) {
...GatsbyImageSharpFluid_withWebp
}
}
}
}
}
}
}`
真正了解远程 API 的 GraphQL Schema 很重要。在 GraphiQL 中查看它。在我的例子中,解析器创建了一个名为imageFile
at的新节点Webiny_BlogPost
。一般来说,这应该在 中完成typeName_SchemaSubType
,其中下划线之前的部分是您在其中typeName
定义的,gatsby-source-graphql
下划线之后的部分是该源中的模式子类型,您希望在其中创建图像(文件)节点。当您查询它时,请保留请记住,您还需要使用远程图像 url 查询节点(在我的情况下headerImage
)以使其工作。