【发布时间】:2019-05-31 08:08:39
【问题描述】:
作为 Typescript 3 monorepo 的一部分,我试图从同一个 repo 中的另一个 (project_1) 中引用一个包 (project_2)。回购看起来像:
|- project_1
| |- package.json (@projects/project_1)
| |- tsconfig.json
| |- src
| |- foo.ts
|- project_2
|- package.json (@projects/project_2)
|- tsconfig.json
|- src
|- bar.ts
foo.ts 使用以下行引用 bar.ts:
import { bar } from "@projects/project_2/src/bar";
当我跑步时
cd project_1 && yarn exec tsc -- --traceResolution
从 Typescript 2.9 开始,我收到以下消息:
======== 从“/home/jesuspc/Code/test2/project_1/src/foo.ts”解析模块“@projects/project_2/src/bar”。 ======== 未指定模块解析类型,使用'NodeJs'。 'baseUrl' 选项设置为 '/home/jesuspc/Code/test2/',使用这个值来 解析非相对模块名称“@projects/project_2/src/bar”。 'paths' 选项被指定,寻找匹配模块的模式 名称“@projects/project_2/src/bar”。模块名称 '@projects/project_2/src/bar',匹配模式 '@projects/'。试 替换“./”,候选模块位置:“./project_2/src/bar”。 将模块加载为文件/文件夹,候选模块位置 '/home/jesuspc/Code/test2/project_2/src/bar', 目标文件类型“TypeScript”。文件 '/home/jesuspc/Code/test2/project_2/src/bar.ts' 存在 - 将其用作名称解析结果。 ======== 模块名称 '@projects/project_2/src/bar' 已成功解析为 '/home/jesuspc/Code/test2/project_2/src/bar.ts'。 ======== src/foo.ts:1:24 - 错误 TS2307:找不到模块 '@projects/project_2/src/bar'。
1 从“@projects/project_2/src/bar”导入 { bar, x };
显然该模块已正确解析:
“模块名称'@projects/project_2/src/bar'已成功解析为'/home/jesuspc/Code/test2/project_2/src/bar.ts'”
然后它失败了:
@projects/project_2/src/bar 未找到
这对我来说没有意义。
我注意到该模块在 Typescript 2.8 中被正确解析并且编译成功。我无法在补丁说明中找到 2.8 和 2.9 之间的任何相关更改。
为什么先报告模块位置正确解析,然后抱怨找不到?
我已将重现问题的代码推送至this repo。
【问题讨论】:
-
考虑使用lerna(可以在下面使用纱线)来自动设置你的包之间的链接。
标签: typescript