Ограничение количества элементов в 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 к 10 в моем собственном определении внутри gatsby-config.js, похоже, никакого эффекта. Есть ли стандартный способ ограничить количество элементов в RSS-ленте, чтобы у меня не было 250+ сообщений?

2 ответа

Решение

Ссылка на документацию @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).

Я использую gatsby-plugin-feedв моем личном проекте. Я пробовал использоватьlimit в запросе GraphQL, как вы предложили в своем вопросе, и это сработало в моем случае.

Я предполагаю, что какой-то другой плагин или код в вашем проекте мешает генерации xml. Единственный способ отладить вашу проблему - создать проект barebone и попытаться сначала ограничить там свои элементы. Я помню, что перечислил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/",
      },
    ],
  },
},

Другие вопросы по тегам