gpt4 book ai didi

typescript - 修复 TypeScript monorepo 中错误的自动导入

转载 作者:行者123 更新时间:2023-12-04 15:19:06 26 4
gpt4 key购买 nike

我有一个具有以下基本文件布局的 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 中找到.

最佳答案

此问题是由 baseUrl 引起的选项。以前在使用 paths 时需要这样做选项。
从 TypeScript 4.1 开始 paths can be used without baseUrl .
所以tsconfig.json看起来像这样:

{
"compilerOptions": {
"paths": {
"@scope/*": ["./packages/*/src"]
},
"module": "es2020",
"moduleResolution": "node"
}
}
省略 baseUrlnot yet supported来自 tsconfig-paths ,它也被各种流行的 TypeScript 相关包使用,例如:
  • eslint-import-resolver-typescript
  • eslint-plugin-import
  • tsconfig-paths-webpack-plugin

  • 请注意,如果您使用 tsconfig-paths"paths"ts-node 一起工作, you must explicitly specify "baseUrl" with it因为它 does not yet support unspecified baseUrl .

    关于typescript - 修复 TypeScript monorepo 中错误的自动导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63737470/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com