![](/img/trans.png)
[英]Lerna with Yarn, TypeScript and React Native: Cannot find module '@project/common' or its corresponding type declarations.ts(2307)
[英]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.