Gatsby 如何在网站范围内更改盖茨比邮报的标题?
我希望我的文章标题是标题案例Gatsby 如何在网站范围内更改盖茨比邮报的标题?,gatsby,Gatsby,我希望我的文章标题是标题案例 它必须是站点范围的(不仅仅是在这样的地方)。我希望避免重复和丢失引用的可能性 我不想回到我的帖子,更新每一篇不是标题的帖子 有没有一种方法可以覆盖frontmatter?我尝试在gatsby node.js中更改它,但我不确定在哪里添加/更改它。我找到了一种解决方案,我认为这是一种黑客攻击。frontmatter可以在创建节点onCreateNode的过程中通过在推送到节点数组之前更新节点来覆盖。我利用epostNodesarray(gatsby节点作用域的全局数组
这样的地方)。我希望避免重复和丢失引用的可能性有没有一种方法可以覆盖frontmatter?我尝试在
gatsby node.js
中更改它,但我不确定在哪里添加/更改它。我找到了一种解决方案,我认为这是一种黑客攻击。frontmatter可以在创建节点onCreateNode
的过程中通过在推送到节点数组之前更新节点来覆盖。我利用epostNodes
array(gatsby节点作用域的全局数组)来创建我的博客页面
createNodeField({ node, name: "slug", value: slug })
node.frontmatter.title = _.startCase(_.toLower(node.frontmatter.title))
postNodes.push(node)
然后,当创建post页面时,exports.createPages
,将使用具有更新值的postNodes
let idx = 0;
postNodes.map(node => {
let previous = idx - 1 < 0 ? postNodes[postNodes.length - 1] : postNodes[idx - 1]
let next = idx + 1 >= postNodes.length ? postNodes[0] : postNodes[idx + 1]
createPage({
path: node.fields.slug,
component: postPage,
context: {
slug: node.fields.slug,
prev: previous.fields.slug,
next: next.fields.slug
}
})
idx += 1;
})
设idx=0;
postNodes.map(节点=>{
让previous=idx-1<0?postNodes[postNodes.length-1]:postNodes[idx-1]
设next=idx+1>=postNodes.length?postNodes[0]:postNodes[idx+1]
创建页面({
路径:node.fields.slug,
组成部分:后期,
背景:{
slug:node.fields.slug,
prev:previous.fields.slug,
下一个:next.fields.slug
}
})
idx+=1;
})
注意在编写代码时,上一个和下一个不起作用,因此需要修改。我碰巧需要修改《盖茨比变形金刚评论》修改frontmatter的方式,这提醒了我这个问题。在我看来,你这样做很好,我只想提供另一种选择。下面是如何做的您可以覆盖frontmatter: 在内部,
gatsby transformer remark
用于解析markdown的frontmatter(将md视为yaml)。我们可以修改graymatter的默认解析器行为以直接重写frontmatter
// should come with `gatsby-transformer-remark` by default
// if it's missing, install it `yarn add js-yaml`
const yaml = require('js-yaml');
const customParser = (str) => {
const result = yaml.safeLoad(str);
// modify `title`. In Gatsby, `title` is guaranteed to exist,
// but you might want to add a check for other properties.
if (result.title) {
result.title = result.title.toUpperCase();
}
return result;
}
然后把它传给盖茨比变压器评论
{
resolve: `gatsby-transformer-remark`,
options: {
+ engines: {
+ yaml: customParser,
+ },
plugins: [
...
],
},
},
盖茨比查询结果:
{
"data": {
"markdownRemark": {
"frontmatter": {
"title": "I AM CAPITALIZED"
}
}
}
}
你好@cbillowes,你能分享更多你的
onCreateNode
吗?什么是postNodes
,它来自哪里?它是gatsby node.js
中的一个全局数组,在addSiblingNodes
中被调用,我在createPages
中使用了它,因为上一个和下一个在当时都不起作用。这是一个黑客为什么我没有将我的答案标记为答案。必须有一种更干净、更有效的方法来做这件事。我将更新我的答案以获得更多的代码。