【问题标题】:Lerna, yarn, and Typescript: Cannot find module or its corresponding type declarationsLerna、yarn 和 Typescript:找不到模块或其对应的类型声明
【发布时间】:2021-05-10 20:26:20
【问题描述】:

我有一个 lerna + yarn 工作区 monorepo,具有独立的版本控制。我在导入同级包时遇到问题。

我有两个包,一个应该依赖另一个,如下图:

(root)
  |--packages
       |--money
       |--money-standard-units
            |--{deps. on money}

money-standard-deps 内部,我尝试导入money 的导出成员,但我无法这样做;我收到以下消息:

TS2307:找不到模块“money”或其对应的类型声明。

我知道可以通过将money 添加到money-standard-libs 的tsconfig 的paths 数组来解决此问题,但我想依赖 built 包,因为它们将被发布分开。我希望它能够像两个单独的存储库一样有效地工作。

我创建了一个demo repo

【问题讨论】:

  • 由于这很常见,需要更多的说明......也许是一个小的 github repo?
  • 我认为@gaitat 可能就是这种情况。我把一个小例子放在一起,并添加了问题的链接。
  • 我无法真正编译,因为没有 @somescope 但可能在 money/src/index.ts 中将 export * from './monetary-unit'; 更改为 export { MonetaryUnit } from './monetary-unit';
  • @gaitat 你能具体说明“没有@somescope”是什么意思吗?如果您的意思是此范围未在 npmjs.com 上注册,那么这正是重点;这些包应该链接到本地​​。
  • 我只是说这个"dependencies": { "@somescope/money": "^0.0.0" }不会解决。

标签: typescript yarnpkg lerna yarn-workspaces


【解决方案1】:

如果要将 typescript 项目用作另一个 typescript 项目的依赖项,则需要配置 typescript 项目以生成类型声明 *.d.ts 文件。为此,您需要将 tsconfig 的 compilerOptions.declaration 属性设置为 true。您可以在 tsconfig-common.json 文件中执行此操作。

例如(tsconfig-common.json):

{
  ...
  "declaration": true
  ...
}

此外,与在 package.json 文件中指定 main 属性以标识包的入口文件的方式相同,您还需要指定 types 属性以指定类型声明文件所在的位置.您需要对 monorepo 中的每个包都执行此操作。

例如(package.json):

{
  "name": "@somescope/money",
  ...
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  ...
}

另外,我注意到您在 monetary-unit 模块中进行了默认导出,但随后在 uses-money 模块中对其进行了命名导入。

如果您打算使用命名导入来引用它,则需要更改 monetary-unit 模块以在类上使用命名导出。

示例(货币单位.ts):

// Remove the default keyword
export class MonetaryUnit {
  constructor(
    readonly value: number,
    readonly name: string,
  ) {}
}

【讨论】:

  • 感谢您回答@JoshA。这绝对解决了问题,现在可以正确导入包。感谢您的帮助!
  • 很高兴我能帮上忙。如果您认为我能够回答您的问题,如果您可以将其标记为已回答,那就太好了。 :-)
  • 绝对!我忙了几天,想用一个复杂的例子来检查一下这在实践中是否有效。一切正常,我已将您标记为答案(任何给予赏金)。再次感谢。
猜你喜欢
  • 2020-12-08
  • 1970-01-01
  • 2021-09-21
  • 2021-02-20
  • 2021-03-17
  • 2021-08-27
  • 2021-01-19
  • 2022-10-17
  • 2022-11-05
相关资源
最近更新 更多