我正在尝试使用纱线建立一个 monorepo。我对如何使用项目引用设置打字稿以使事情正确解决感到困惑。
例如,如果我有一个像这样的文件夹结构
/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",
}
}
在此模型中,两者都使用tsconfig 中设置的cmd
和字段进行编译。这意味着他们所有编译的 javascript 都进入了andclient
outDir
sourceRoot
dist/
cmd/dist
client/dist
如果现在我尝试引用一个类 from client
into cmd
like
import Foo from 'client/src/foo'
IDE 非常乐意解决这个问题,因为它似乎是通过 typescriptreferences
属性映射的。
但是,编译后的 javascript 归结为
const foo_1 = require("client/src/foo");
但是,实际构建的 javascript 是 in client/dist/src/foo
,因此在运行时这永远不会起作用。
另一方面,如果我不使用 sourceRoots 和 outDirs 并且在同一个文件夹中将 javascript 与打字稿文件内联,那么一切都可以正常工作(但会使 repo 变脏并且需要自定义 gitignores 来排除东西)
任何人都可以阐明如何正确设置带有纱线工作区的 typescript 3.x monorepo 以使事情正常工作吗?