Я пытаюсь настроить монорепозиторий с использованием пряжи. Я не понимаю, как настроить машинописный текст со ссылками на проекты, чтобы все было правильно.
Например, если у меня есть структура папок вроде
/cmd
/client
И я хочу, чтобы cmd
зависел от client
, я мог бы:
cmd/tsconfig.json
:
{
"compilerOptions": {
"types": ["reflect-metadata", "jest"],
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": "node",
"declaration": true,
"importHelpers": true,
"composite": true,
"target": "esnext"
"sourceRoot": "src",
"outDir": "dist"
},
"references": [
{
"path": "../client"
}
],
"include": [
"src/**/*"
]
}
с package.json
{
"name": "cmd",
"version": "1.0.0",
"dependencies": {
"client": "^1.0.0",
}
}
В этой модели и cmd
, и client
компилируются с полями outDir
и sourceRoot
, установленными в их tsconfig. Это означает, что весь их скомпилированный JavaScript помещается в подпапку dist/
папок cmd/dist
и client/dist
.
Если сейчас я попытаюсь сослаться на класс из client
в cmd
, например
import Foo from 'client/src/foo'
IDE вполне рада решить эту проблему, поскольку кажется, что она отображается через свойство typescript references
.
Однако скомпилированный javascript сводится к
const foo_1 = require("client/src/foo");
Однако фактический встроенный javascript находится в client/dist/src/foo
, поэтому во время выполнения это никогда не работает.
С другой стороны, если я не использую sourceRoots и outDirs и у меня есть javascript, встроенный в файлы typescript в той же папке, все работает (но делает репо грязным и требует пользовательских gitignores для исключения вещей)
Может ли кто-нибудь пролить свет на то, как правильно настроить монорепозиторий TypeScript 3.x с рабочими пространствами пряжи, чтобы все просто работало?