使用npm workspaces如何跳过src目录导入共享包的TS文件
解决TypeScript Monorepo中跳过src目录导入的问题
针对你用npm workspaces搭建的TypeScript monorepo,要实现跳过@package/shared的src目录直接导入,需要精准配置package.json的exports字段和TypeScript的typesVersions,以下是可行方案:
1. 配置@package/shared的package.json
在packages/shared/package.json中添加如下配置,覆盖默认的文件解析规则:
{ "name": "@package/shared", "type": "module", "exports": { ".": "./src/index.ts", "./*": "./src/*/index.ts", "./*/*": "./src/*/*.ts" }, "typesVersions": { "*": { "*": ["src/*"], "*/*": ["src/*/*"] } } }
配置说明:
".": 匹配根导入@package/shared,直接指向src/index.ts"./*": 匹配一级子路径(如@package/shared/types),指向对应目录下的index.ts"./*/*": 匹配二级文件路径(如@package/shared/types/foo-type),直接指向src下的对应ts文件typesVersions: 告诉TypeScript如何映射类型路径,确保类型检查和编辑器提示正常工作
2. 确认TypeScript配置
确保你的monorepo根目录或@package/shared的tsconfig.json中开启正确的模块解析规则:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, "rootDir": "./src", "outDir": "./dist" }, "include": ["src/**/*"] }
验证效果
配置完成后,你期望的导入方式都能正常生效:
// 正常生效 import { ... } from "@package/shared" import { ... } from "@package/shared/types" import { ... } from "@package/shared/types/foo-type" import { ... } from "@package/shared/constants" import { ... } from "@package/shared/constants/foo-const" // 会报错(符合预期,无对应导出规则) import { ... } from "@package/src/shared/..."
为什么之前的通配符无效?
你之前尝试的"./*": "./src/*"只能匹配一级路径(如types),无法覆盖二级文件路径(如types/foo-type);而"./": "./src/*.ts"的写法不符合Node.js导出规则,自然无法生效。必须明确配置多级通配符,同时搭配typesVersions处理TypeScript的类型解析逻辑。
内容的提问来源于stack exchange,提问作者DaaWaan
相关产品推荐
相关产品推荐

