【问题标题】:Typescript module was successfully resolved but cannot be foundTypescript 模块已成功解析但找不到
【发布时间】: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


【解决方案1】:

我做了什么:

  • project_1 中,将依赖项的路径更改为"@projects/project_2": "../project_2"
  • 仍在project_1,已安装@types/node

现在,当我运行 yarn exec tsc 时,它按预期工作。

✨  Done in 3.48s.

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 2022-06-13
    • 2015-05-11
    • 2014-12-23
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    相关资源
    最近更新 更多