monorepo 中的“'rootDir' 应包含所有源文件”

"'rootDir' is expected to contain all source files" in monorepo

我正在为客户将大型(大概)monorepo 转换为 TypeScript,但是,我自己对 TS 还很陌生,并且 运行 出现错误,我找不到

的明显修复

TS6059: File '[path to repo root]/packages/config/globals.ts' is not under 'rootDir' '[path to repo root]/packages/components/src'. 'rootDir' is expected to contain all source files.

globals.ts 文件不应该存在于 components 包中,它属于 config 包所以我不太明白这个错误。

我在 repo 的根目录中有一个主要的 tsconfig 文件 (https://github.com/serge-web/serge/blob/feature/333-game-admin-channel/tsconfig.json) and then each package has it's own tsconfig file which extends that one. The one for the components package is here: https://github.com/serge-web/serge/blob/feature/333-game-admin-channel/packages/components/tsconfig.json

我假设我错误地扩展了包中的 tsconfig 文件,或者我错误地使用了 references,但我找不到正确的方法来执行此操作。

如果您需要查看结构,这里是一个 link 到 repo:https://github.com/serge-web/serge/tree/feature/333-game-admin-channel

最后,修复是从根目录中的 tsconfig.json 文件(我保留为 .)以外的所有文件中删除对 rootDir 的任何引用。

唯一对我有用的是在 package.json:

中明确添加包含外部代码的包作为依赖项
{
    "dependencies": {
        "@packages/name": "*"
    }
}

在我的设置中,我没有使用 Lerna,只使用带有 TypeScript 和 JavaScript 包的原始 Yarn Workspaces。

我在 typings 目录中找到了 .ts。将扩展名从 filename.ts 更改为 filename.d.ts 解决了问题。所有其他文件都以这种方式命名,这是旧代码,我不知道为什么那个文件的扩展名为 .ts 而不是 .d.ts

我以前也遇到过同样的问题

references才是解决这个问题的正确方法

我的 monorepo 应用程序文件结构是这样的:

MyMonorepo
├── lerna.json
├── package.json
├── packages
│   ├── packageA
│   │   ├── package.json
│   │   ├── src
│   │   │   ├── index.ts
│   │   └── tsconfig-build.json
│   └── packageB
│       ├── package.json
│       ├── src
│       │   └── index.ts
│       └── tsconfig-build.json
├── tsconfig.json
└── yarn.lock

并且packageA使用了一些packageB的组件。

像这样配置 packageAtsconfig-build.json

{
    "extends": "../../tsconfig.json",
    "include": ["src/**/*"],
    "exclude": ["src/**/*.test.ts", "src/**/*.test.tsx", "**/demos/*.ts", "**/demos/*.tsx"],
    "compilerOptions": {
        "rootDir": "./src",
        "outDir": "./dist/types",
        "composite": true,
        "emitDeclarationOnly": true,
        "skipLibCheck": true
    },
    "references": [{ "path": "../packageB/tsconfig-build.json" }]
}

references 配置解决了我的问题。

文档:https://www.typescriptlang.org/docs/handbook/project-references.html