Turborepo下TypeScript包:如何实现无src/dist前缀的导入结构
解决Turborepo中TypeScript包的导入路径问题
要实现import { Test } from "package-name/Test"这类无前缀的导入,核心是通过package.json的exports字段配置路径映射,同时配合TSConfig调整让TypeScript识别路径。以下是具体步骤:
1. 配置每个包的package.json
在单个包的package.json中添加exports字段,分别指定开发环境(指向src)和生产环境(指向dist)的路径,同时配置类型文件:
{ "name": "package-name", "type": "module", // 若使用ESM需添加,CommonJS无需此字段 "exports": { ".": { "import": "./dist/index.js", "require": "./dist/index.cjs", "types": "./dist/index.d.ts", "development": "./src/index.ts" }, "./Test": { "import": "./dist/Test.js", "require": "./dist/Test.cjs", "types": "./dist/Test.d.ts", "development": "./src/Test.ts" } // 可继续添加其他子模块的映射,比如./Utils等 }, "scripts": { "build": "tsc" // 确保构建命令将src编译到dist目录 } }
该配置会让Node和TypeScript在开发时自动指向src下的文件,生产时指向构建后的dist文件,无需手动添加路径前缀。
2. 调整TypeScript配置
在单个包的tsconfig.json中,确保以下配置正确:
{ "compilerOptions": { "baseUrl": ".", "paths": { "package-name/*": ["src/*"] // 辅助编辑器识别路径,避免语法报错 }, "declaration": true, // 必须开启,生成类型声明文件 "outDir": "./dist", // 指定编译输出目录 "rootDir": "./src" // 指定源码根目录 }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
如果是Turborepo根目录的tsconfig.json,可通过references字段引用各个包的配置,确保全局TS识别一致:
{ "files": [], "references": [ { "path": "./packages/package-name" } // 其他包的路径 ] }
3. 验证Turborepo构建流程
确保turbo.json中的构建管道正确输出dist目录:
{ "pipeline": { "build": { "outputs": ["dist/**/*"], "dependsOn": ["^build"] }, "dev": { "cache": false, "persistent": true // 开发模式持续监听文件变化 } } }
注意事项
- 确保每个子模块(如
Test.ts)在src目录下存在,且构建后dist目录会生成对应的Test.js和Test.d.ts文件 - 若使用CommonJS,需调整
exports中的import/require对应格式,比如将.js替换为.cjs - 若编辑器仍有路径报错,可重启TS服务(VSCode中按
Ctrl+Shift+P,选择TypeScript: Restart TS Server)
内容的提问来源于stack exchange,提问作者Ben Rauzi
相关产品推荐
相关产品推荐

