Ограничение количества элементов в 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/",
},
],
},
},