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" }
。
我有一个包含 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" }
。