You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lerna Monorepo中tsconfig.json继承引发TS18003错误排查

问题根源

TypeScript处理tsconfig继承时,include、exclude这类路径配置是相对于被继承的配置文件所在目录解析的,不是继承它的子包目录。你的基础配置在packages/tsconfig/tsconfig.json里,里面的"src/"会被解析成packages/tsconfig/src/,子包core继承后,路径就变成了相对于core的../tsconfig/src/,这才导致找不到输入文件的错误。

解决方案

方法1:用TypeScript 4.5+的${configDir}变量(推荐)

TypeScript 4.5及以上支持${configDir}占位符,它代表当前tsconfig文件所在的目录(也就是子包自己的目录)。修改基础配置:

// packages/tsconfig/tsconfig.json
{
    "extends": "@sindresorhus/tsconfig",
    "compilerOptions": {
        "outDir": "dist"
    },
    "include": [
        "${configDir}/src/"
    ]
}

子包继承后,${configDir}会自动替换成子包的目录路径,最终include就指向子包自己的src/,完美解决路径问题。

方法2:子包手动覆盖include

如果你的TypeScript版本低于4.5,直接在每个子包的tsconfig里显式写include,覆盖基础配置的路径:

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

这种方式需要每个子包都配置,但兼容性拉满,适合老版本项目。

方法3:调整基础配置位置

把基础tsconfig移到仓库根目录,命名为tsconfig.base.json,然后子包继承根目录的配置:

// 根目录tsconfig.base.json
{
    "extends": "@sindresorhus/tsconfig",
    "compilerOptions": {
        "outDir": "dist"
    }
}
// packages/core/tsconfig.json
{
    "extends": "../../tsconfig.base.json",
    "include": [
        "./src/"
    ]
}

这种方式绕开了路径解析的坑,适合不想依赖新特性的场景。

内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:05:14