跳转到正文

English core guides · 历史记录保留中文

决策 006:包内导入约定 ​

状态: 已采纳。日期: 2026-09-11。

问题 ​

原项目混用仅由 TypeScript 配置解释的路径别名和包声明的子路径导入,共享配置可能意外把一个应用的导入解析到另一个应用。

决策 ​

apps/app、apps/web 和 packages/ui 的包内导入使用 # 前缀,并在各自 package.json 的 imports 声明。跨共享包使用 @repo/*;接口、数据库和直接运行的脚本可使用相对路径。

工作台还在 TypeScript 配置声明对应路径映射,以同时满足编译器和打包器对扩展名的不同处理。修改时保持两处一致,不增加跨应用的全局回退路径。

示例 ​

ts
import { auth } from "#lib/auth";
import { websiteConfig } from "@repo/core";

第一条引用当前工作台文件,第二条引用共享包。包内无扩展名的浏览器代码由打包器解析,不能默认直接用原生 Node 运行。

取舍 ​

统一约定减少复制组件时解析到错误目录的风险,但工作台有两处映射需要同步。枚举所有扩展名的条件导入会增加目录变更成本,因此不作为默认方案。

供语言模型读取:llms.txt · llms-full.txt
采用 MIT 许可证。