feed
为你的 VuePress 站点生成 Feed。
使用
npm i -D @vuepress/plugin-feed@nextimport { feedPlugin } from '@vuepress/plugin-feed'
export default {
plugins: [
feedPlugin({
hostname: 'https://example.com',
atom: true,
}),
],
}插件可以生成以下格式的 Feed,启用你需要的格式即可:
- Atom 1.0:
atom - JSON 1.1:
json - RSS 2.0:
rss
hostname 选项是必须的,Feed 链接由它生成。
可视化预览
Atom 和 RSS Feed 内置了 XSL 模板,因此在浏览器中打开时会渲染为易于阅读的 HTML 页面。你可以查看本站的 Atom 和 RSS Feed 作为示例。
如果你希望在开发服务器中预览 Feed,请设置 devServer: true;如果你的本地地址不是默认的 http://localhost:{port},还需要配置 devHostname。
频道信息
channel 选项用于配置所有 Feed 共用的频道信息。推荐设置 channel.pubDate、channel.ttl、channel.copyright 和 channel.author。
参考:频道选项。
条目生成
默认情况下,除首页外所有由 Markdown 文件生成的页面都会被添加到 Feed 中。你可以:
- 通过 feed Frontmatter 移除单个页面,或覆盖该页面 Feed 条目的字段;
- 通过 getter 选项 完全控制条目的生成逻辑。
条目默认按照 Git 中的页面创建时间排序,并在缺少创建时间时回退到 date Frontmatter。你需要启用 @vuepress/plugin-git 才能获取创建时间,否则条目会遵循 VuePress 默认的页面顺序。
多语言支持
插件会为每种语言生成独立的 Feed,你可以通过 locales 选项为不同语言提供特定配置。
选项
string站点部署的域名,例如 https://example.com。
boolean是否生成 Atom 1.0 Feed。
boolean是否生成 JSON 1.1 Feed。
boolean是否生成 RSS 2.0 Feed。
number100每个 Feed 中最多包含的条目数量。
stringFeed 的图片,用作横幅。
stringFeed 的图标,用作网站图标。
(RegExp | string)[] | (tagName: string) => boolean需要在 Feed 内容中保留的元素。除此之外的未知标签都会被移除。
(page: Page) => boolean({ frontmatter, filePathRelative }) => Boolean(frontmatter.feed ?? (filePathRelative && !frontmatter.home))用于判断页面是否包含在 Feed 中的函数。
(pageA: Page, pageB: Page) => number用于对 Feed 条目排序的函数。
参考:条目生成。
Partial<FeedChannelOptions>生成 Feed 的频道信息。
参考:频道选项。
FeedGetterFeed 条目生成逻辑的控制器,默认使用内置的 getter。
参考:获取器选项。
boolean是否在开发服务器中生成 Feed。
string'http://localhost:${port}'开发服务器中使用的域名。
string'atom.xml'Atom Feed 的输出文件名,相对于输出目录。
stringAtom Feed 的 XSL 模板内容,默认为内置的 atom.xsl。
string'atom.xsl'Atom XSL 文件的输出文件名,相对于输出目录。
string'feed.json'JSON Feed 的输出文件名,相对于输出目录。
string'rss.xml'RSS Feed 的输出文件名,相对于输出目录。
stringRSS Feed 的 XSL 模板内容,默认为内置的 rss.xsl。
string'rss.xsl'RSS XSL 文件的输出文件名,相对于输出目录。
Record<string, BaseFeedPluginOptions>针对特定语言的配置。除 hostname 外,上述所有选项均受支持。
频道选项
详情
string频道的标题。
string频道对应的站点地址。
string频道的描述。
stringlang频道的语言。
string频道的版权信息。
Date频道的发布时间。
Date频道内容的最后更新时间。
numberFeed 阅读器在刷新前可以缓存内容的分钟数。
string频道的图片,建议使用尺寸不小于 512×512 的方形图片。
string频道的图标,建议使用尺寸不小于 128×128 且背景透明的方形图片。
FeedAuthor | FeedAuthor[]频道的主要作者。
interface FeedAuthor {
name?: string
email?: string
/** 仅限 json 格式 */
url?: string
/** 仅限 json 格式 */
avatar?: string
}stringWebSub 的链接,请参阅 WebSub。
获取器选项
详情
(page: Page, app: App) => string获取 Feed 条目的标题。
(page: Page, app: App) => string获取 Feed 条目的链接。
(page: Page, app: App) => string | null获取 Feed 条目的描述。
Atom 支持在描述中使用 HTML,返回以 html: 开头的字符串即可。
(page: Page, app: App) => string | null获取 Feed 条目的摘要。
(page: Page, app: App) => string获取 Feed 条目的正文内容。
(page: Page, app: App) => FeedAuthor[]获取 Feed 条目的作者。缺少作者信息时应返回空数组。
interface FeedAuthor {
name?: string
email?: string
/** 仅限 json 格式 */
url?: string
/** 仅限 json 格式 */
avatar?: string
}(page: Page, app: App) => FeedCategory[] | null获取 Feed 条目的分类。
interface FeedCategory {
name: string
/** 仅限 rss 格式 */
domain?: string
/** 仅限 atom 格式 */
scheme?: string
}(page: Page, app: App) => FeedEnclosure | null获取 Feed 条目的媒体附件。
interface FeedEnclosure {
url: string
/** 应为标准 MIME 类型,仅限 rss 格式 */
type: string
/** 仅限 rss 格式 */
length?: number
}(page: Page, app: App) => Date | null获取 Feed 条目的发布日期。
(page: Page, app: App) => Date获取 Feed 条目的最后修改日期。
(page: Page, app: App) => string获取 Feed 条目的图片,需要返回完整的绝对 URL。
(page: Page, app: App) => FeedContributor[]获取 Feed 条目的贡献者。缺少贡献者信息时应返回空数组。
interface FeedContributor {
name?: string
email?: string
/** 仅限 json 格式 */
url?: string
/** 仅限 json 格式 */
avatar?: string
}(page: Page, app: App) => string | null获取 Feed 条目的版权信息。
Frontmatter
添加与移除
默认情况下,除首页外所有由 Markdown 文件生成的页面都会被添加到 Feed 中。在 Frontmatter 中设置 feed: false 可以移除某个页面。
基础信息
以下标准的 Frontmatter 属性会被自动读取。
string页面标题,默认回退到第一个 h1 标题。
string页面的描述。
Date页面的发布日期,会被默认的 Feed 条目排序器使用。
AuthorInfo | AuthorInfo[] | string | string[]页面的作者。对象形式的作者需要含有 name 字段,可以含有可选的 url 和 email 字段。
string页面的版权信息。
string页面的封面图片,必须是完整的 URL 链接或绝对路径。
string页面的横幅图片,优先级高于 cover,会被用作 Feed 条目的图片。两者都未设置时,会使用页面内容中的第一张图片。
Feed 选项
feed Frontmatter 用于覆盖上述标准属性,或提供 Feed 条目专用的字段。
FeedFrontmatterOption | false是否将页面包含在 Feed 中,或该页面的 Feed 条目配置。
string该 Feed 条目的标题。
string该 Feed 条目的描述,应为纯文本。
string该 Feed 条目的摘要,应为 HTML 内容。
string该 Feed 条目的内容,默认为页面内容。
FeedAuthor | FeedAuthor[]该 Feed 条目的作者。
interface FeedAuthor {
name?: string
email?: string
/** 仅限 json 格式 */
url?: string
/** 仅限 json 格式 */
avatar?: string
}FeedContributor | FeedContributor[]该 Feed 条目的贡献者。
interface FeedContributor {
name?: string
email?: string
/** 仅限 json 格式 */
url?: string
/** 仅限 json 格式 */
avatar?: string
}FeedCategory | FeedCategory[]该 Feed 条目的分类。
interface FeedCategory {
name: string
/** 仅限 rss 格式 */
domain?: string
/** 仅限 atom 格式 */
scheme?: string
}string该 Feed 条目的全局唯一标识符,默认为条目的链接。
