1

gatsby-plugin-feed内部结构似乎表明我们可以对显示在提要中的帖子数量设置限制:

{
  // Create a default RSS feed. Others may be added by using the format below.
  feeds: [
    {
      query: `
      {
        allMarkdownRemark(
          limit: 1000,
          sort: {
            order: DESC,
            fields: [frontmatter___date]
          }
        ) {
          edges {
            node {
              frontmatter {
                title
                date
              }
              fields {
                slug
              }
              excerpt
              html
            }
          }
        }
      }
    `,
    ...
  ]
}

当我尝试在我自己的定义中更改limit为时,它似乎没有任何效果。有没有一种标准方法来限制 RSS 提要中的项目数量,这样我就没有 250 多个帖子?10gatsby-config.js

4

2 回答 2

1

gatsby-plugin-feed在我的个人项目中使用。我尝试limit按照您在问题中的建议在 GraphQL 查询中使用它,它在我的情况下有效。

我的猜测是您项目中的其他一些插件或代码会干扰 xml 生成。调试您的问题的唯一方法可能是创建一个准系统项目并尝试首先在那里限制您的项目。我记得我gatsby-plugin-feed错误地列出了两次,因此删除了第一个列表中的说明。

这是我的代码。也许它可以帮助你:

// gatsby-config.js

{
  resolve: `gatsby-plugin-feed`,
  options: {
    query: `
      {
        site {
          siteMetadata {
            title
            description
            siteUrl
            site_url: siteUrl
          }
        }
      }
    `,
    feeds: [
      {
        serialize: ({ query: { site, allMarkdownRemark } }) => {
          return allMarkdownRemark.edges.map(edge => {
            return Object.assign({}, edge.node.frontmatter, {
              description: edge.node.excerpt,
              url: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              guid: site.siteMetadata.siteUrl + "/blog" + edge.node.fields.slug,
              categories: ["Startup"],
              custom_elements: [
                { "content:encoded": edge.node.html },
                { "author": edge.node.frontmatter.author },
                { "language": "en" },
              ],
            });
          });
        },
        query: `
          {
            allMarkdownRemark(
              sort: { order: DESC, fields: [frontmatter___date] },
              filter: {fileAbsolutePath: {regex: "content/blog/"}},
              limit: 2
            ) {
              edges {
                node {
                  excerpt
                  html
                  fields { slug }
                  frontmatter {
                    title
                    date
                    author
                  }
                }
              }
            }
          }
        `,
        output: "/rss.xml",
        title: "Blog",
        match: "^/blog/",
      },
    ],
  },
},

于 2020-04-03T09:12:38.793 回答
0

@AlbertSkibinski 在他的评论中的文档链接帮助我意识到 RSS 提要仅在gatsby build. 我正在进行更改并尝试运行,这对我在文件夹gatsby develop中检查的输出没有影响。public

我不喜欢覆盖不需要覆盖的默认值,所以我通过从以下位置导入默认值拼凑了我自己的配置代码gatsby-plugin-feed/internals

const gatsbyFeedOpts = require('gatsby-plugin-feed/internals')

// Copy and replace limit in default options
let feedOpts = gatsbyFeedOpts.defaultOptions
feedOpts.feeds[0].query = feedOpts.feeds[0].query.replace(
  'limit: 1000',
  'limit: 10'
)

module.exports = {
  siteMetadata: {
    // Excluded for brevity
  },
  plugins: [
    // Other plugins excluded for brevity
    {
      resolve: `gatsby-plugin-feed`,
      options: feedOpts,
    },
  ],
}

有趣的是,尽管文档说我们需要serialize在提要配置中实现一个方法,但它并未包含在我在这里使用的导入默认值中。这可能会在未来版本中导致问题gatsby-plugin-feed,但它适用于我当前使用的版本 (2.4.1)。

于 2020-04-10T03:46:28.673 回答