Typescript 在 monorepo 中构建路径不正确的文件

Typescript builds files with incorrect path in monorepo

我有一个包含 3 个包的示例 monorepo:back、front 和 shared。具有以下文件夹结构:

root
├── back
│   ├── dist
│   ├── src
│       ├── test.ts
│   ├── package.json
│   └── tsconfig.json
├── front
├── shared
│   ├── dist
│   ├── src
│       ├── my-enum.ts
│   ├── package.json
│   └── tsconfig.json
├── package.json
└── tsconfig.json

test.ts

import { MyEnum } from '@test/shared/src/my-enum'
setTimeout(() => console.log(2 == MyEnum.B), 1000, 1)

我的-enum.ts

export enum MyEnum{ A = 1, B, C }

当我构建后包时,typescript 在 dist 文件夹中生成一个 test.js 文件 var my_enum_1 = require("@test/shared/src/my-enum");,但是共享包的编译文件在 dist 文件夹中,而不是在 src 中,所以如果我尝试 运行 和 node 我会收到以下错误:

Error: Qualified path resolution failed: we looked for the following paths, but none could be accessed.

Source path: E:\Repository\workspace_test\shared\src\my-enum
Not found: E:\Repository\workspace_test\shared\src\my-enum
Not found: E:\Repository\workspace_test\shared\src\my-enum.js
Not found: E:\Repository\workspace_test\shared\src\my-enum.json
Not found: E:\Repository\workspace_test\shared\src\my-enum.node

如果我使用 ts-node 而不是 node 它会起作用,但这不是我希望在部署后 运行 这样做的方式。我假设我的 tsconfig.json 文件中有些东西需要更改,但我找不到它是什么,我能找到的其他相关 SO 问题不是很有帮助。

我在 github 上上传了一个示例 repo,以便任何愿意提供帮助的人都能更轻松地进行操作,但这是我的 ts.config 文件:

根目录:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "sourceMap": true
    }
}

返回:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "composite": true,
        "outDir": "dist",
        "rootDir": "src"
    },
    "references": [
        { "path": "../shared" }
    ]
}

共享:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "composite": true,
        "outDir": "dist",
        "rootDir": "src"
    }
}

好的,为了解决这个问题,我不得不更改 package.json 而不是 tsconfig.json。使 shared/package-json 中的 main 字段指向 dist 文件夹由于某种原因没有做任何事情,但 exports 字段实际上有效,因此在那里创建一个别名解决了这个问题。

所以对于这个示例项目,它会像 "exports": { "./src/my-enum": "./dist/src/my-enum.js" }