簡體   English   中英

Lerna、yarn 和 Typescript:找不到模塊或其對應的類型聲明

[英]Lerna, yarn, and Typescript: Cannot find module or its corresponding type declarations

我有一個 lerna + yarn 工作區 monorepo,具有獨立的版本控制。 我在其兄弟姐妹中導入 package 時遇到問題。

我有兩個包,其中一個應該依賴於另一個,如下圖所示:

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

money-standard-deps中,我嘗試導入money的導出成員,但我無法這樣做; 我收到以下消息:

TS2307:找不到模塊“金錢”或其相應的類型聲明。

我知道這個問題可以通過將money添加到money-standard-libs的 tsconfig 的paths數組來解決,但我想依賴於內置的 package 因為這些將單獨發布。 我希望它能夠像兩個單獨的存儲庫一樣有效地工作。

我創建了一個演示倉庫

如果要將其用作另一個 typescript 項目的依賴項,則需要配置 typescript 項目以生成類型聲明*.d.ts文件。 為此,您需要將 tsconfig 的compilerOptions.declaration屬性設置為true 您可以在tsconfig-common.json文件中執行此操作。

例如(tsconfig-common.json):

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

此外,以同樣的方式在package.json文件中指定main屬性,以識別 package 的入口文件,您還需要指定types聲明文件所在的位置。 您需要為 monorepo 中的每個 package 執行此操作。

例如(package.json):

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

另外,我注意到您在貨幣單位模塊中進行了默認導出,但隨后在使用貨幣模塊中對其進行了命名導入。

如果您打算使用命名導入來引用它,則需要更改monetary-unit模塊以在 class 上使用命名導出。

示例(貨幣單位.ts):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM