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
的组件。
像这样配置 packageA
的 tsconfig-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
我正在为客户将大型(大概)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
的组件。
像这样配置 packageA
的 tsconfig-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