У меня довольно простое моно репо. Он доступен на GitLab здесь . Для этого используются рабочие пространства пряжи, TypeScript, Jest, ts-jest
и ESLint с eslint-plugin-import
.
. Я пытаюсь правильно построить пакеты проектов с использованием TypeScript. Ранее я просто публиковал файлы TypeScript вместе с их кодом JavaScript в том же каталоге.
Моя попытка построить проект доступна в запросе слияния GitLab здесь
Сейчасхранилище имеет следующую структуру:
|- example/
| |- index.ts
| |- package.json
| `- tsconfig.json
|- packages/
| |- koas-core/
| | |- src/
| | | `- index.ts
| | |- package.json
| | `- tsconfig.json
| |- koas-status-code/
| | |- src/
| | | `- index.ts
| | |- package.json
| | `- tsconfig.json
| `- more similar workspaces…
|- package.json
|- tsconfig.json
`- more configuration files…
Некоторые пакеты зависят друг от друга. Мне удалось получить Jest тесты и eslint-plugin-import
для работы с этой настройкой, но у меня возникли проблемы при создании проекта.
Корень tsconfig.json
выглядит так:
{
"compilerOptions": {
"baseUrl": ".",
"composite": true,
"declaration": true,
"module": "commonjs",
"noEmit": true,
"resolveJsonModule": true,
"target": "esnext",
"paths": {
"koas-*": ["packages/koas-*/src"]
}
},
"exclude": ["**/*.test.ts"]
}
Рабочее пространство tsconfig.json
файлы выглядят следующим образом:
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "lib"
}
}
Каждое рабочее пространство имеет сценарий prepack
, определенный в package.json
, который выглядит следующим образом:
{
"scripts": {
"prepack": "tsc --noEmit false"
}
}
main
поле относится к lib
.
Если я запускаю yarn workspace koas-status-code prepack
, я получаю следующую ошибку:
$ tsc --noEmit false
error TS6059: File 'koas/packages/koas-core/src/SchemaValidationError.ts' is not under 'rootDir' 'koas/packages/koas-status-code'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/SchemaValidationError.ts' is not under 'rootDir' 'koas/packages/koas-status-code/src'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/createDefaultValidator.ts' is not under 'rootDir' 'koas/packages/koas-status-code'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/createDefaultValidator.ts' is not under 'rootDir' 'koas/packages/koas-status-code/src'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/createMatcher.ts' is not under 'rootDir' 'koas/packages/koas-status-code'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/createMatcher.ts' is not under 'rootDir' 'koas/packages/koas-status-code/src'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/index.ts' is not under 'rootDir' 'koas/packages/koas-status-code'. 'rootDir' is expected to contain all source files.
error TS6059: File 'koas/packages/koas-core/src/index.ts' is not under 'rootDir' 'koas/packages/koas-status-code/src'. 'rootDir' is expected to contain all source files.
error TS6307: File 'koas/packages/koas-core/src/SchemaValidationError.ts' is not listed within the file list of project 'koas/packages/koas-status-code/tsconfig.json'. Projects must list all files or use an 'include' pattern.
error TS6307: File 'koas/packages/koas-core/src/createDefaultValidator.ts' is not listed within the file list of project 'koas/packages/koas-status-code/tsconfig.json'. Projects must list all files or use an 'include' pattern.
error TS6307: File 'koas/packages/koas-core/src/createMatcher.ts' is not listed within the file list of project 'koas/packages/koas-status-code/tsconfig.json'. Projects must list all files or use an 'include' pattern.
error TS6307: File 'koas/packages/koas-core/src/index.ts' is not listed within the file list of project 'koas/packages/koas-status-code/tsconfig.json'. Projects must list all files or use an 'include' pattern.
Found 12 errors.
Я также пробовал это tsconfig.json
для koas-status-code
:
{
"extends": "../../tsconfig.json",
"include": ["src"],
"references": [{ "path": "../koas-core" }],
"compilerOptions": {
"outDir": "lib"
}
}
Это создает рабочее пространство, но все равно выдает мне следующую ошибку:
$ tsc --noEmit false
src/index.ts:1:23 - error TS6305: Output file '/home/remco/Projects/koas/packages/koas-core/lib/src/index.d.ts' has not been built from source file '/home/remco/Projects/koas/packages/koas-core/src/index.ts'.
1 import * as Koas from 'koas-core';
~~~~~~~~~~~
Found 1 error.
Как это исправить?