typescript - 使用具有多个 tsconfig 的自定义导入路径时找不到模块
问题描述
我有一个包含多个tsconfig.json
文件的项目。我想缩短所有进口,但由于某种原因,缩短进口在特定情况下不起作用。
项目结构:
foo/
| main.ts
| tsconfig.json
projects/
| bar/
| index.ts
tsconfig.json
每当我想编译时foo/main.ts
,我都会收到以下错误:Cannot find module @bar/shared
.
一些细节:
该projects/bar/index.ts
文件只是导出一个普通类:export class Foo {}
foo/main.ts
尝试导入类Foo
:
import {Foo} from '@bar/shared';
最后但并非最不重要的tsconfig.json
inside foo
:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"moduleResolution": "node",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"lib": ["es6", "dom"],
"types": [
"node"
],
"outDir": "../dist/foo"
}
}
和根tsconfig.json
:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
],
"paths": {
"@bar/shared": ["projects/bar"]
}
}
}
我的 IDE 完全满意 - 但我无法编译。
解决方案
简答
在您的foo/tsconfig.json
文件中,删除该baseUrl
条目,因为它错误地覆盖baseUrl
了根tsconfig.json
文件中的条目。
细节
该baseUrl
值是解析非相对模块名称和paths
映射条目的基本目录。结果,在解析@bar/shared
映射条目时,模块解析策略搜索相baseUrl
对于./src
. 此外,由于./src
是相对路径,因此其完整路径基于其/foo/tsconfig.json
文件的位置。因此,路径映射条目解析为./foo/src/projects/bar/
.
所有这些细节和更多信息都可以在模块解析文档中找到。
--traceResolution
解决这些错误的一个很好的工具是使用该--traceResolution
选项进行构建。对于您的项目设置,使用它从foo/
目录构建包括以下输出:
将模块加载为文件/文件夹、候选模块位置
'C:/dev/temp/foo/src/projects/bar'
、目标文件类型“TypeScript”。
运行
TypeScript 路径映射允许路径映射,但不会重写这些路径。运行时(在您的情况下node
)必须知道如何查找@bar/shared
. 您还需要使用路径映射配置运行时。这是一个node
可以让你这样做的包:https ://www.npmjs.com/package/module-alias
推荐阅读
- c++ - 无法理解函数返回的类型
- discord - Nuke 命令 discord.py
- python - 我正在尝试使用两个端点 (x1,y1)(x2,y2) 为一条线设置动画,但 line.set_data() 函数似乎没有更新 x 和 y 坐标
- javascript - 连接集合查看器 Firebase
- firebase - 如何使用 Firebase 身份验证获取 onAuthStateChanged 流?
- java - “主要”java.lang.ClassCastException:[Ljava.lang.Comparable; 不能转换为 [LNode;
- python - ZeroDivisionError:在 chess.py 中除以零
- python - Swift 中的简单线性插值
- node.js - 如何使用 node.js 仅更新 JSON 文件中的一个键
- android - zipalign:符号查找错误:/usr/lib/x86_64-linux-gnu/android/libbacktrace.so.0:未定义符号:_ZN11unwindstack12ElfInterfaceD2Ev