簡體   English   中英

禁止在 Nrwl Nx 中的同一庫中導入桶文件

[英]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.jsonnx-enforce-module-boundaries規則中設置了標簽來阻止在庫中導入應用程序。 它有效,這部分很好。

我想做的另一件事是在庫中強制使用桶文件。 所以我在tsconfig.ts創建了一個路徑

"paths": {
   "@myNs/my-lib": ["libs/myLib/index.ts"]
}

我遇到了這個問題。 假設我們從index.ts導出了一些東西。

// index.ts
export { MyComponent } from './components/my.component';

現在,如果我們使用一些自動導入 IDE 功能(例如來自WebStormVS 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

問題:

  1. 如何禁止在同一個庫中導入桶文件?
  2. 如何將 IDE 配置為在 lib 內部具有相對路徑,而在外部具有 TypeScript 路徑( @myNs/my-lib )?

這是 IntelliJ 中的設置。 我在 v2020.1 中看到這項工作正常。

在 IntelliJ 下的 Editor > Code Style > Typescript 中設置名為“使用來自 tsconfig.json 的路徑映射”設置為“僅在指定路徑之外的文件中”

然而,我喜歡@Nickson 創建的規則,並認為添加以防止錯誤是個好主意!

沒有人回答,所以我決定創建一個簡單的TSLint規則來處理這種情況: import-blacklist-extended

規則在Nrwl monorepo 中Nrwl良好,但它可以優化並且某些機制可以更好地解決。 如果您需要任何更改,請隨時在 Github 上創建問題和 PR。

暫無
暫無

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

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