用途:为应用与包中相关实现文件的分组提供规则,涉及 index.ts 公共 API、导入路径与文件夹命名。不覆盖 Next.js 的 lucide 风格包导入优化、Fastify 路由结构或 Drizzle schema 设计。
前提假设:TypeScript ESM 且导入路径带 .js 扩展名;目录名用 kebab-case;应用本地分组索引用具名再导出,包子路径在作为发布模块边界时可用 export *。
主要原则:一个文件夹聚合同一关注点的 2 个以上实现文件;当所有导出共享同一运行时,index.ts 即该组的公共 API;进入文件夹内部去掉文件名前缀(oauth-google.ts → oauth/google.ts);外部导入该组(.../feature/index.js),内部直接导入同级文件;单文件模块保持为文件,测试与实现同目录;混合运行时不建统一 index,改用具名入口文件。
必须:文件夹名用 kebab-case;应用本地分组索引使用具名再导出,避免 export * 巨型 barrel;创建文件夹前先解决同名冲突(auth.ts 与 auth/);不得添加父级巨型 barrel(如 lib/index.ts、components/ui/index.ts),不得创建 foo/foo.ts 加薄再导出 index,不得在 Fastify 自动加载树(routes/、plugins/)添加 index.ts,不同运行时不得合并到一个 index。
建议:分组索引保持小而聚焦于单一功能域;再导出可能造成循环导入时用具名入口文件;优先使用已有包子路径而非新增根 barrel。仓库规则有例外时以仓库规则为准。
模式示例:同运行时用分组索引 oauth/ 下含 shared.ts、google.ts、index.ts(仅具名再导出),消费方 import { getOAuthAllowedCallbackUrls } from '../lib/oauth/index.js';拆分运行时如 logger/ 下 server.ts、client.ts 不建 index.ts,直接导入 logger/server、logger/client;避免循环时用具名入口,catalogs/index.ts 只放字典,mapper.ts 从 ./index.js 导入且不被再导出。反模式包括一层前缀汤、lib/index.ts 全量再导出、auth.ts 与 auth/ 并存、将 cookies 与 document 统一到一个 index 破坏服务端/客户端边界。资料未提供安装命令或收费信息。