![](/img/trans.png)
[英]How to share library within other library nx (nrwl) - singlerepo
[英]Disallow barrel file imports within the same library in Nrwl Nx
假設我們在Nrwl Nx
有一個應用程序和一個庫。
/apps
/myApp
/libs
/myLib
/components
/my.component.ts
/other.component.ts
/index.ts
我已經在nx.json
和nx-enforce-module-boundaries
規則中設置了標簽來阻止在庫中導入應用程序。 它有效,這部分很好。
我想做的另一件事是在庫中強制使用桶文件。 所以我在tsconfig.ts
創建了一個路徑
"paths": {
"@myNs/my-lib": ["libs/myLib/index.ts"]
}
我遇到了這個問題。 假設我們從index.ts
導出了一些東西。
// index.ts
export { MyComponent } from './components/my.component';
現在,如果我們使用一些自動導入 IDE 功能(例如來自WebStorm
或VS Code
)。 他們將使用路徑@myNs/my-lib
導入MyComponent
- 這是意料之中的,因為我剛剛像這樣配置了它。
當我想里面的東西AUTOIMPORT出現一個現實的問題myLib
(這些進口應該是相對的,不是@myNs/my-lib
) -根據邏輯和這篇文章( [有趣的文章,在這里] ):
永遠不要讓 lib 從它自己的 Barrel 文件中導入
特定庫中的 TypeScript 模塊不應該關心該庫公開什么功能,因此它在任何時候都不應該使用自己的桶文件。
如果一個模塊從它自己的桶文件中導入一些東西,它幾乎總是會導致循環引用錯誤。 因此,從模塊內部導入應該使用相對路徑導入。
所以我找到了一種解決方法來阻止 lib 中的類似 TS 路徑的導入。 我在libs/myLib/tslint.json
添加了一條規則:
"rules": {
"import-blacklist": [true, "@myNs/my-lib"]
}
無論如何,它不修復自動導入功能,只是不允許在庫中使用錯誤的導入。
另一個問題是仍然允許錯誤的導入。 假設OtherComponent
要導入MyComponent
那么有三種可能:
import { MyComponent } from './my.component'; // the correct way
import { MyComponent } from '.'; // not the best, but also the correct way
import { MyComponent } from '..'; // using barrel file - not correct (look at the citation above), but still successfuly validated by TSLint
問題:
@myNs/my-lib
)?沒有人回答,所以我決定創建一個簡單的TSLint
規則來處理這種情況: import-blacklist-extended
規則在Nrwl
monorepo 中Nrwl
良好,但它可以優化並且某些機制可以更好地解決。 如果您需要任何更改,請隨時在 Github 上創建問題和 PR。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.