@efebia/ fastify-auto-import
从目录中自动发现和注册路由插件的快捷插件 .
安装
npm install @efebia/fastify-auto-import
使用量
import Fastify from 'fastify';
import autoImport from '@efebia/fastify-auto-import';
const fastify = Fastify();
await fastify.register(autoImport, {
// Required: the starting directory (use import.meta.url in ESM)
startingDirectory: import.meta.url,
// Directory to scan, relative to startingDirectory (default: 'src/plugins')
directory: 'src/plugins',
// File name to import from each subdirectory (default: 'routes')
routeFile: 'routes',
// Subdirectories to skip (default: [])
excludedDirectories: ['_shared'],
});
鉴于以下结构:
src/plugins/
users/
routes.ts
orders/
routes.ts
_shared/
utils.ts ← skipped
插件会注册 users/routes.ts 财务报告和审定财务报表 orders/routes.ts 作为快捷插件.
每个路由文件必须导出默认的快取插件 :
// src/plugins/users/routes.ts
import type { FastifyPluginAsync } from 'fastify';
const plugin: FastifyPluginAsync = async (fastify) => {
fastify.get('/users', async () => ({ users: [] }));
};
export default plugin;
API 密码
autoImport (默认导出)
A 类 fastify-plugin 兼容插件。 登记在 fastify.register()。 。 。 .
选项 (单位:千美元)Globber:
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
startingDirectory | string | —— 说 | 要求. 基础目录. 过 import.meta.url (ESM)或 (中文(简体) ) __dirname (中文(简体) ). |
directory | string | 'src/plugins' | 扫描路由子目录, 相对于 startingDirectory。 。 。 . |
routeFile | string | 'routes' | 从每个子目录导入文件名( 没有扩展名 ) . |
excludedDirectories | string[] | [] | 子目录名可跳出. |
recursive | boolean | false | 扫描给路由文件的嵌入子目录,而不仅仅是直接的孩子. |
fileBasedRouting | boolean | false | 从路径衍生每个文件夹的 URL 前缀 。 见下文. |
log | pino.BaseLogger | 快捷登录 | 导入错误的 Logger 实例 . |
递归模式
默认情况下, 插件只看 直接子目录 联 合 国 directory设置 recursive: true 将整个树行走,并在任意深度登记包含路径文件的每个子目录.
await fastify.register(autoImport, {
startingDirectory: import.meta.url,
directory: 'src/plugins',
recursive: true,
});
鉴于这一结构:
src/plugins/
users/
routes.ts ← registered
profile/
routes.ts ← registered (nested)
orders/
routes.ts ← registered
items/
routes.ts ← registered (nested)
_shared/
utils.ts ← skipped (no routes file)
无 recursive,仅限 users/routes.ts 财务报告和审定财务报表 orders/routes.ts 将注册。 与 recursive: true, (中文(简体) ), users/profile/routes.ts 财务报告和审定财务报表 orders/items/routes.ts 也会被捡起.
excludedDirectories 仍然适用于每个深度——一个匹配的目录名称连同其所有后人一起被跳过.
基于文件的路由
设定 fileBasedRouting: true 以创建文件夹 URL。 它走着整棵树(不需要 recursive) (中文(简体) ).
src/routes/
api/
users/
routes.ts ← /api/users
get.ts ← plain handler, imported by routes.ts (not auto-loaded)
[userId]/
routes.ts ← /api/users/:userId
(private)/
tasks/routes.ts ← /api/tasks ((private) adds no segment)
- 完整文件夹路径为 URL. 每个
routes.ts在自己的封装范围内,该路径为:prefix,因此它只声明与其文件夹相对的路径(app.get('/', ...), (中文(简体) ),app.get('/export', ...)) (中文(简体) ). - 范围是独立的: 母文件夹中的钩
routes.ts绝不适用于儿童文件夹(反之亦然). [id]变成:id指定文件夹_x或者说(group)添加无段.- 只有
routes文件已装入。 文件夹中的任何其它内容( 处理器, 计程器) 都由您导入 . - 中间软件不是内置的。 添加钩子或
preHandler单位中routes.ts这需要他们. excludedDirectories财务报告和审定财务报表routeFile像往常一样.
许可证
麻省理工学院