首页 > 解决方案 > 如何在网站范围内更改 Gatsby 帖子标题?

问题描述

我希望我的帖子标题是标题大小写。

  1. 它必须是站点范围的(不仅仅是在<Helmet>. 我想避免重复和丢失参考的可能性。

  2. 我不想回到我的帖子并更新每个不是标题大小写的帖子。

有没有办法覆盖frontmatter?我尝试更改它,gatsby-node.js但我不确定在哪里添加/更改它。

标签: gatsby

解决方案


我找到了一个我认为是 hack 的解决方案。在创建节点期间,可以通过在将onCreateNode节点推送到节点数组之前更新节点来覆盖frontmatter。我利用postNodes数组(gatsby-node 范围的全局数组)来创建我的博客页面。

createNodeField({ node, name: "slug", value: slug })
node.frontmatter.title = _.startCase(_.toLower(node.frontmatter.title))
postNodes.push(node)

然后,当创建帖子页面时exports.createPagespostNodes使用具有更新值的 。

    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;
    })

注意Prev 和 next 在编写该代码时不起作用,因此需要对其进行修改。


推荐阅读