VuePress Plugin Feed
RSS, Atom, and JSON feeds generator plugin for VuePress 1.x
Install
$ npm install -D vuepress-plugin-feed # or $ yarn add -D vuepress-plugin-feed
Usage
Add vuepress-plugin-feed
in your site or theme config file.
// .vuepress/config.js// or// .vuepress/theme/index.js // set your global feed options - override in page frontmatter `feed`const feed_options = canonical_base: 'https://webmasterish.com'; moduleexports = plugins: 'feed' feed_options
frontmatter
Page Page frontmatter.feed
is optional. It can be used to override the defaults.
Check the Page class
for more details.
--- title: Page Title feed: enable: true title: Title used in feed description: Description used in feed image: /public/image.png author: - name: Author email: author@doamin.tld link: http://doamin.tld contributor: - name: Contributor email: contributor@doamin.tld link: http://doamin.tld ---
How pages are added as feed items
A page is auto added as a feed item if one the following conditions is met:
frontmatter.feed.enable === true
frontmatter.type === 'post'
- it resides in whatever the
posts_directories
are set to (the defaults areblog
and_posts
)
if you need to exclude a particular page that meets one of the conditions above,
you can use frontmatter.feed.enable === false
.
Details on how pages are filtered can be found in PLUGIN.is_feed_page()
.
The PLUGIN.is_feed_page()
function is the default way of filtering the pages,
you can override it using is_feed_page
option (see Options section below).
Options
See Plugin Option API official docs
Default options
You can override default options in 2 ways:
- Global plugin options set in
.vuepress/config.js
or.vuepress/theme/index.js
as described in Usage - Individual page/post
frontmatter
as shown in Pagefrontmatter
const title description } = contextgetSiteData ? context : context; // ----------------------------------------------------------------------------- // Feed class options// @see: https://github.com/jpmonette/feed#example const feed_options = title description generator: PLUGINhomepage // --------------------------------------------------------------------------- // the following are auto populated in PLUGIN.get_options() // if they are not set as options /* id, link, feedLinks, */ // --------------------------------------------------------------------------- // ref: /* title: "Feed Title", description: "This is my personal feed!", id: "http://example.com/", link: "http://example.com/", image: "http://example.com/image.png", favicon: "http://example.com/favicon.ico", copyright: "All rights reserved 2013, John Doe", updated: new Date(2013, 6, 14), // optional, default = today generator: "awesome", // optional, default = 'Feed for Node.js' feedLinks: { json: "https://example.com/json", atom: "https://example.com/atom" }, author: { name: "John Doe", email: "johndoe@example.com", link: "https://example.com/johndoe" } */ ; // ----------------------------------------------------------------------------- const default_options = // required; it can also be used as enable/disable canonical_base: '' // --------------------------------------------------------------------------- // Feed class options - @see: https://github.com/jpmonette/feed#example // optional - auto-populated based on context.getSiteData() feed_options // --------------------------------------------------------------------------- // @notes: // property name is also the name of the jpmonette/feed package function feeds: rss2: enable : true file_name : 'rss.xml' head_link : enable: true type : 'application/rss+xml' title : '%%site_title%% RSS Feed' // ------------------------------------------------------------------------- atom1: enable : true file_name : 'feed.atom' head_link : enable: true type : 'application/atom+xml' title : '%%site_title%% Atom Feed' // ------------------------------------------------------------------------- json1: enable : true file_name : 'feed.json' head_link : enable: true type : 'application/json' title : '%%site_title%% JSON Feed' // --------------------------------------------------------------------------- // page/post description sources // order of what gets the highest priority: // // 1. frontmatter // 2. page excerpt // 3. content markdown paragraph // 4. content regular html <p> description_sources: 'frontmatter' 'excerpt' // markdown paragraph regex // @todo: needs work // /^+\n/gim // // this excludes blockquotes using `(?!^>)` ///^((?:(?!^#)(?!^\-|\+)(?!^[0-9]+\.)(?!^!\[.*?\]\((.*?)\))(?!^>)(?!^\[\[.*?\]\])(?!^\{\{.*?\}\})[^\n]|\n(?! *\n))+)(?:\n *)+\n/gim, // html paragraph regex /<p><\/p>/i // --------------------------------------------------------------------------- // page/post image sources // order of what gets the highest priority: // // 1. frontmatter // 2. content markdown image such as `` // 3. content regular html img image_sources: 'frontmatter' /!\[.*?\]\(\)/i // markdown image regex /<img.*?src=['"]['"]/i // html image regex // --------------------------------------------------------------------------- // pages in current directories will be auto added as feed // unless they are disabled using their frontmatter // this option is used by the default is_feed_page function posts_directories: '/blog/' '/_posts/' // --------------------------------------------------------------------------- // function to check if the page is to be used in a feed item is_feed_page: PLUGINis_feed_page // function // --------------------------------------------------------------------------- count: 20 // optional sorting function for the entries. // Gets the array entries as the input, expects the sorted array // as its output. // e.g.: sort: entries => _.reverse( _.sortBy( entries, 'date' ) ), // Don't forget to do a `const _ = require('lodash');` to be able to use `_`! entries // --------------------------------------------------------------------------- // supported - use in config as needed // category // contributor ;
Reference
- VuePress official plugin docs
- VuePress official Front Matter
- jpmonette/feed
- RSS 2.0 specificatiion
- Atom feed
- JSON feed
Related Plugins
License
MIT © webmasterish