TypeScript Monorepo跨包导入如何避免指定build路径?
解决方案
方法一:手动聚合导出(最简洁直接)
在ProjectA的src/index.ts里,把maths.ts的函数聚合到入口文件导出:
export function isEven(n: number): boolean { return n % 2 === 0 } // 新增导出maths模块的内容 export { Add } from './maths'
之后ProjectB里就能统一从包名导入:
import { isEven, Add } from "@monorepo/utils"
方法二:配置package.json支持子路径导入(适合多模块场景)
如果不想把所有导出都堆到入口文件,可以修改ProjectA的package.json,通过exports字段定义子路径映射,同时配置类型识别:
{ "name": "@monorepo/utils", "version": "1.0.0", "description": "The package containing some utility functions", "main": "./build/index.js", "type": "commonjs", "scripts": { "build": "tsc --build" }, "exports": { ".": "./build/index.js", "./maths": "./build/maths.js" }, "typesVersions": { "*": { "maths": ["./src/maths.ts"] } } }
这样ProjectB就能按照源码结构的路径导入:
import { isEven } from "@monorepo/utils" import { Add } from "@monorepo/utils/maths"
额外提示:确保TypeScript依赖解析正常
如果使用TypeScript项目引用(Project References),需要:
- 在ProjectA的
tsconfig.json中设置"composite": true - 在ProjectB的
tsconfig.json里添加引用配置:
{ "references": [{ "path": "../ProjectA" }] }
这样构建时会自动处理依赖顺序,类型也能正确关联。
内容的提问来源于stack exchange,提问作者Damien Sawyer
相关产品推荐
相关产品推荐

