Monorepo里怎么让不同包共享TypeScript配置?

Tr° 羽墨 阅读 4

我用pnpm workspace搭了个Monorepo,里面有几个React组件包和一个工具函数包。现在每个包都复制了一份tsconfig.json,改起来太麻烦了,想抽成一份共享的配置。

试过在根目录建tsconfig.base.json然后在子包里用"extends": "../../tsconfig.base.json",但VS Code老报路径解析错误,类型检查也不生效。是不是还得配paths或者references?求个靠谱方案!

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "moduleResolution": "node",
    "strict": true,
    "declaration": true,
    "outDir": "./dist",
    "jsx": "react-jsx"
  }
}
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
百里玉聪
遇到这种情况,首先确保路径设置正确。你提到的 extends 路径看起来没问题,但有时候 VS Code 的缓存或者项目加载顺序可能会导致问题。可以先尝试重启 VS Code 或者清理缓存。

其次,确保根目录的 tsconfig.base.json 文件格式正确,并且没有语法错误。你的基础配置看起来是好的,但是要记得在根目录下的 tsconfig.json 中包含对所有子项目的引用,这样 TypeScript 编译器才知道哪些文件需要处理。

可以在根目录下创建一个 tsconfig.json 文件,内容如下:

{
"files": [],
"references": [
{ "path": "./packages/package1" },
{ "path": "./packages/package2" },
{ "path": "./packages/tool-utils" }
]
}


然后,在每个子包的 tsconfig.json 中,继续使用 extends 来继承基础配置:

{
"extends": "../../tsconfig.base.json",
"include": ["src"]
}


这里的 include 字段告诉 TypeScript 哪些文件需要被包含在当前项目的编译范围内。确保 src 目录是每个子包的实际源码目录。

最后,别忘了做校验。在命令行中运行 tsc --build --verbose 来检查是否有任何错误信息,这有助于定位问题。

希望这些步骤能帮到你,如果问题依然存在,可能是 VS Code 的某些扩展或者设置导致的,可以尝试禁用一些扩展看看是否有所改善。
点赞
2026-03-24 18:00