typescript - 为什么 IntelliJ 会为 .spec 文件生成不同的导入语句?
问题描述
我想知道为什么 IntelliJAdd import statement
在规范文件中使用时的工作方式不同:
设置非常简单。
在项目tsconfig.base.ts
文件中,我们指定一个路径:
{
"compilerOptions": {
"paths": {
"@idea-import-spec/data": [ "libs/data/src/index.ts" ]
}
},
在同一lib
目录中,我们有 3 个文件:
util.ts
导出一个常数:
export const TEST = 1;
和 2 个导入此常量的文件。
例如在data.ts
- 添加
const x = TEST;
- 然后将光标移动到末尾
TEST
- 按 ALT+ENTER 并选择
Add import statement
- 这将添加一个相对导入 - 这是好的和预期的:
import {TEST} from "./util";
但是当我在文件中做同样的事情时data.spec.ts
,它使用路径导入!
import {TEST} from "@idea-import-spec/data";
为什么会有所不同以及如何解决?
更多细节:
- 这是完整的GitHub 测试存储库
- 我什至改变了两者
tsconfig.lib.json
并tsconfig.spec.json
具有相同的内容 - IntelliJ 版本:2021.1.2 Ultimate
- 问题截图:
解决方案
将Use path mappings from tsconfig.json设置为Always时,IDE 会在添加导入时尝试使用映射。但是,正如"@idea-import-spec/data"
映射到libs/data/src/index.ts
那样,反过来,从 重新导出所有内容lib/data.ts
,添加映射导入到data.ts
会导致循环依赖 - 这就是使用相对路径的原因。但data.spec.ts
不会在桶中重新导出,因此在那里使用路径映射看起来很安全