此模块提供了实现 RSS feed 的额外功能。它与 module-feed 非常相似,但支持 nuxt-content。
如果您需要完全自定义的 feed,您可以自由选择任何 feed 模块(此模块或上面提到的模块)。但此模块可能更灵活。
nuxt-content 开箱即用配置nuxt-content 开箱即用配置默认设置为
{
defaults: {
common: true,
routes: true,
mapping: true,
mappingTemplates: true,
},
feeds: {
common: {
revisit: '6h',
fixDateFields: true,
feed: { title: 'Generated title by nuxt-feedme!' },
collections: ['content'],
templateMapping: ['', 'meta', 'meta.feedme'],
mapping: [
['link', 'path'],
],
},
routes: {
'/feed.atom': { type: 'atom1' },
'/feed.json': { type: 'json1' },
'/feed.xml': { type: 'rss2' },
}
},
}
根据设计,Nuxt 将合并默认设置和用户提供的设置。有时您需要省略默认设置,而使用您自己的设置。为此,只需将所需默认设置设置为 false。
fixDateFields 选项仅影响创建的 Feed 项目(date 和 published 字段)。
Feedme 支持以下通用和专用钩子
feedme:handle[${PATH}]feedme:handlefeedme:handle:content:before[${PATH}]feedme:handle:content:beforefeedme:handle:content:query[${PATH}]feedme:handle:content:queryfeedme:handle:content:item[${PATH}]feedme:handle:content:itemfeedme:handle:content:after[${PATH}]feedme:handle:content:after其中 PATH 是 feed 路由(例如,/feed.xml 或任何用户定义的路由)。
内容钩子**仅**在默认处理程序未创建 feed 时执行。feedme:content* 钩子中的 feed 创建可防止 Feedme 通过内容模块自动创建 feed。
您可以使用专用钩子创建自定义 feed,或从自定义创建中“脱离”路由。
import type { NitroApp } from 'nitropack'
export default (nitroApp: NitroApp) => {
nitroApp.hooks.hook('feedme:handle', async ({ context: { event, routeSettings }, feed: { obtain } }) => {
// Note: You need to manually escape content paths when use both manual and content approaches
const escapeRoutes = new Set(['/content.xml', '/pages.json'])
if (escapeRoutes.has(event.path)) return
// Note: Since there's no specialized hooks for atom feed, general will create feed object
const feed = obtain({ title: `Default feed for '${event.path}'`, ...routeSettings.feed })
feed.addItem({ date: new Date('2025-09-20'), link: '/', title: 'General hook article' })
})
nitroApp.hooks.hook('feedme:handle[/feed.xml]', async ({ context: { event }, feed: { obtain } }) => {
// Note: Specialized hook is always called before general
const feed = obtain({ title: `Special feed for '${event.path}' route` })
feed.addItem({ date: new Date('2025-09-21'), title: 'Exclusive for xml (from specialized hook)' })
})
}
您仍然可以通过内容钩子修改内容 feed。
feedme:handle:content:before* 钩子在任何交互之前设置 Feed。feedme:handle:content:query* 钩子提供自定义查询或集合(提供查询时会忽略集合)。feedme:handle:content:item* 钩子来操作 feed 项目候选项或删除(丢弃)它。feedme:handle:content:after* 钩子来操作已完成的 feed。请参阅 playground/server/plugins/feed.ts 中的示例。
映射用于将 feed 项目键链接到解析内容中的路径。
重大变更:自 v2 起,不再支持第三个参数。使用 feedme:handle:content:item* 钩子修改数据(通过 raw 获取的原始解析内容,或通过 set、get 和 del 获取的项目候选项)。
Feedme 模块提供了默认映射以及 ''(根)、'meta'(Nuxt 解析内容中 .md 文件中用户对象的字段)和 'meta.feedme'(.md 文件对象中的嵌套对象)的模板根。
此外,Feedme 还提供了额外的映射 ['link', 'path'](Nuxt 解析内容对象中的默认字段 link 到 feed 项目 path 字段)。
通过模板根,可以自动从 .md 内容页面创建 feed 项目(请参阅 playground 目录)。
为简单起见,Feedme 将 feeds.common.fixDateFields 设置为 true,这会在 feedme:handle:content:item* 钩子之前为**候选项**启用字符串到日期的转换。
以前称为标签。
替换字段是一个对数组。
第一个项是字符串,被视为序列化的 RegExp 对象,用于在解析内容对象值中(递归)搜索替换项。
第二个项是实际字符串,用于替换所有匹配的 RegExp。
大多数设置可以在 common 和 per route 中设置。
{
feeds: {
common: {
replace: [[/^(?=\/)/.toString(), baseUrl]],
},
}
}
nuxt-feedme 依赖项添加到您的项目中。yarn add -D nuxt-feedme
pnpm add -D nuxt-feedme
npm install --save-dev nuxt-feedme
nuxi module 安装它npx nuxi@latest module add nuxt-feedme
nuxt-feedme 添加到 nuxt.config.ts 的 modules 部分export default defineNuxtConfig({
modules: [
// After nuxt content
'@nuxt/content',
'nuxt-feedme'
]
})
就是这样!您现在可以在 Nuxt 应用中使用 nuxt-feedme 了 ✨
对于本地开发,强烈建议使用 docker
docker compose --profile develop up
可选:如果您想释放会话,请使用分离运行(-d 标志)。
替代方案
# Install dependencies
yarn install
# Run playground
yarn run dev --host '0.0.0.0'
# Run prepack to make sure, that module is ready
yarn run prepack
警告:请使用 conventional commits,否则您的更改可能会被拒绝或推送到备用分支。