我有一个TypeScript单声道存储库,具有以下基本文件布局:
├── packages/
│ ├── workspace-a/
│ │ ├── src/
│ │ └── tsconfig.json
│ └── workspace-b/
│ ├── src/
│ └── tsconfig.json
└── tsconfig.json
根tsconfig.json
如下所示(去除了不相关的属性):
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@scope/*": ["packages/*/src"]
},
"module": "es2020",
"moduleResolution": "node"
}
}
每个程序包的 tsconfig.json
如下:
{
"extends": "../../tsconfig"
}
所有软件包都使用@scope
范围。此设置可以使workspace-a
的以下代码正常工作:
import { Foo } from '@scope/workspace-b';
但是,以下代码也可以根据tsc
起作用,并且首先由VSCode中的自动导入建议:
import { Foo } from '@scope/workspace-b/src';
import { Bar } from 'packages/workspace-b/src';
将软件包发布到npm后,后者不起作用,从而导致在发布软件包后 出现问题。
我可以使TypeScript禁止后者吗?我也会接受涉及现有ESLint规则的解决方案。
完整的源代码可以在here中找到。
答案 0 :(得分:0)
此问题是由 baseUrl
选项引起的。以前使用 paths
选项时需要这样做。
从 TypeScript 4.1 paths
can be used without baseUrl
开始。
所以 tsconfig.json
看起来像这样:
{
"compilerOptions": {
"paths": {
"@scope/*": ["./packages/*/src"]
},
"module": "es2020",
"moduleResolution": "node"
}
}
省略 baseUrl
是 tsconfig-paths
的 not yet supported,它也被各种流行的 TypeScript 相关包使用,例如: