gpt4 book ai didi

gatsby - 使用 gatsby-transformer-sharp 时将空字符串作为图像路径处理

转载 作者:行者123 更新时间:2023-12-05 00:11:12 26 4
gpt4 key购买 nike

我正在将 Gatsby 与 Netlify CMS 一起使用。我使用 gatsby-transformer-sharp 进行各种图像处理。

在 Netlify CMS 中,如果用户删除图像,则 frontmatter 值变为空字符串,例如:

我的博客帖子.md:

---
image: ''
---

当我查询 Graphql 时,这会导致 gatsby-transformer-sharp 出错:
Error Field "image" must not have a selection since type "String" has no subfields.

这似乎是因为 Gatsby/Graphql 已将图像字段推断为字符串。

所以我创建了一个 schema.md文件,所以总会有至少一个带有有效图像的条目:

_schema.md:
---
image: /some-dummy-image.jpg
---

这似乎部分解决了这个问题——构建只是偶尔失败。但它仍然失败。我认为它必须从它遇到的第一个 Markdown 文件中推断出它的架构——有时它会找到 _schema.md首先,有时它会找到 my-blog-post.md第一的。

有没有人设法找到解决方案?

最佳答案

我最终设法解决了这个问题。我没有意识到在推断模式之前直接从 frontmatter 中删除这些空字段实际上很容易。

我制作了一个小的自定义插件,它会递归地遍历 frontmatter 字段,并删除任何具有空字符串的字段。我还只允许它删除具有特定名称的字段(例如: image ),因此它不会在其他地方引起意外更改。

src/plugins/remove-empty-fields/gatsby-node.js:

let fieldsToRemove = [];

const deleteFieldsRecursive = (node) => {
fieldsToRemove.forEach(fieldToRemove => {
if (node[fieldToRemove] === '') {
delete node[fieldToRemove];
}
});

if (typeof node === 'object') {
Object.values(node).forEach(subNode => {
deleteFieldsRecursive(subNode);
})
}
};

exports.onCreateNode = ({ node }, configOptions) => {
fieldsToRemove = configOptions.fieldsToRemove;

if (node.internal.type === 'MarkdownRemark') {
if (!node.frontmatter) {
return;
}

deleteFieldsRecursive(node);

}
};

然后将其添加到 gatsby-config.js 的插件列表中
{
resolve: 'remove-empty-fields',
options: {
fieldsToRemove: [
'image',
'bgImage',
],
},
},

关于gatsby - 使用 gatsby-transformer-sharp 时将空字符串作为图像路径处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com