add rss feed on gatsby blog

Предыдущие статьи

Погнали

В этой части добавим на блог rss ленту. Для начала установим плагин gatsby-plugin-feed

npm i gatsby-plugin-feed

Добавляем плагин в секцию plugins в gatsby-config.js

// gatsby-config.js
module.exports = {
	// ...
	plugins: [
		{
	      resolve: 'gatsby-plugin-feed',
	      options: {
	        feeds: [
		          {
		            serialize: ({ query: { site, allMarkdownRemark } }) => {
		              return allMarkdownRemark.nodes.map(node => {
		                const postUrl = `${site.siteMetadata.siteUrl}/${node.fields.slug}/`;
		                return Object.assign({}, node.frontmatter, {
		                  title: node.fields.title,
		                  description: `${node.excerpt}\nТеги: ${(node.frontmatter.tags || []).join(',')}`,
		                  date: node.frontmatter.date,
		                  url: postUrl,
		                  guid: postUrl,
		                })
		              })
		            },
		            query: `
		              {
		                allMarkdownRemark(
		                  sort: { order: DESC, fields: [frontmatter___date] },
		                ) {
		                  nodes {
		                    excerpt
		                    fields { 
		                      slug
		                      title
		                    }
		                    frontmatter {
		                      date
		                      tags
		                    }
		                  }
		                }
		              }
		            `,
		            output: "/rss.xml",
		            title: "The Strange Adventurer's RSS Feed",
		          }
			]
		  }
		},
	]
}

Выше мы указали в методе serialize как именно мы обрабатываем данные и в query указали запрос, в котором мы эти данные запрашиваем. Теперь можно проверить во что собирается наша rss лента. Для этого нам необходимо выполнить команду:

npm run build && npm run serve

После чего открыть в браузере http://localhost:9000/rss.xml - если все хорошо - то должны увидеть содержимое с анонсами статей в xml формате!