【发布时间】:2019-07-05 07:20:06
【问题描述】:
我正在尝试使用以下 graphQL 查询:
{
allMarkdownRemark(
limit: 1000
) {
edges {
node {
id
parent {
id
}
fields{
slug
hero {
childImageSharp {
fixed {
src
}
}
}
}
frontmatter {
template
}
}
}
}
}
hero 字段当前使用以下代码返回图像的路径:
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions
// Add slug to MarkdownRemark node
if (node.internal.type === 'MarkdownRemark') {
const value = createFilePath({ node, getNode, basePath: 'library' })
const { dir } = getNode(node.parent)
const getHero = (d) => {
let hero = `${__dirname}/src/images/no-hero.gif`
if (fs.existsSync(`${d}/hero.jpg`)) hero = `${d}/hero.jpg`
if (fs.existsSync(`${d}/hero.png`)) hero = `${d}/hero.png`
if (fs.existsSync(`${d}/hero.gif`)) hero = `${d}/hero.gif`
return hero
}
createNodeField({
node,
name: 'slug',
value,
})
createNodeField({
node,
name: 'hero',
value: getHero(dir),
})
}
}
我看到其他人在frontmatter 中使用图像路径做类似的事情,但我不想使用 frontmatter,因为它很容易让 graphql 看到文件路径而无需指定它.
但是,当我尝试上述方法时,出现以下错误:
字段 \"hero\" 不能有选择,因为类型 \"String\" 没有 子字段。
有没有办法让childImageSharp 识别这个字段?
【问题讨论】: