typescript “'rootDir'应该包含所有源文件”在monorepo中

bcs8qyzn  于 2023-04-07  发布在  TypeScript
关注(0)|答案(5)|浏览(167)

我正在为客户端将一个大型(ish)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),然后每个包都有自己的tsconfig文件,它扩展了那个文件。components包的tsconfig文件在这里:https://github.com/serge-web/serge/blob/feature/333-game-admin-channel/packages/components/tsconfig.json
我假设我扩展包中的tsconfig文件不正确,或者我错误地使用了references,但我找不到正确的方法来做到这一点。
这里是一个链接到仓库,如果你需要看到的结构:https://github.com/serge-web/serge/tree/feature/333-game-admin-channel

zed5wv10

zed5wv101#

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

qvtsj1bj

qvtsj1bj2#

唯一对我有用的是在package.json中显式地添加包含外部代码的包作为依赖项:

{
    "dependencies": {
        "@packages/name": "*"
    }
}

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

pjngdqdw

pjngdqdw3#

我以前也有同样的问题。
references是解决这个问题的正确方法。
我的monorepo app文件结构是这样的:

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

8zzbczxx

8zzbczxx4#

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

piztneat

piztneat5#

在Angular 15和NX monorepo中,我注意到ts-config.base.json属性paths影响了它们顺序的库的顺序。如果你有一个库,里面有其他库的依赖项,你需要把依赖项放在使用它们的库之上。

paths: [
  @lib/which-use-other-libs,
  @smaller/lib
  @constants/lib
  @lib/which-use-smaller-lib // <- here will be an error, should be before smaller/lib
]

相关问题