iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

用了一陣子 NX 後瞭解了些這組工具的基本功能與一些限制,這邊做個整理。

指令工具幫助執行操作與建立元件

NX 提供的 executor 與 generator 等工具對於在單一資源庫中管理複數專案跟套件幫助很大,可以很方便的用 NX 指令操作個別專案,生成預設格式的元件,或是自動套用模組並做好初始設定。

nx generate @nx/next:application

NX 藉由將一些開發上必經的操作編寫成 executor 或 generator ,節省開發者反覆操作這些步驟所需的時間,另外也能藉此一貫化開發架構跟格式。

自動偵測專案間的依賴關係

NX 適合用於管理 monorepo 的另一個功能,是能夠自動偵測專案間的依賴關係,形成一目瞭然的依賴地圖,並且根據這些依賴關係制定任務執行的步驟,不用人工一一執行像是“要先測試好 A 再測試 B 才能確認 B的測試有效”的任務。

不過不是所有檔案類型的關聯都有辦法被自動偵測到,像是 .vue 或 .astro 這類框架自訂的檔案類型,就要做額外的設定才有辦法形成正確的關聯地圖。

目前找到的幾個設定方法:

  1. 用 tag 手動設定專案間的關聯,強制生成依賴關係。
  2. 找到社群開發的套件補丁,擴充 NX 自動偵測的範圍。

平行任務處理與結果快取

NX 指令能夠同時處理複數個任務,可以同時跑多個專案的測試或建置,節省時間。

nx run-many --target=test --parallel=5

並行處理的同時還是會根據任務間的依賴關係排定先後順序,所以如果依賴層數太多的話,依序執行下可能還是會花很多時間。

不過 NX 的任務結果暫存機制可以幫助改善這個問題。

對於每個任務,NX 會根據任務輸入的檔案內容生成雜湊值,並在跑完測試的時候將結果存為該雜湊值的快取。

而當下次執行任務時,若程式碼或資源沒有變化,計算出的任務雜湊值相同的話,就會省略重新測試的步驟直接提供之前快取的結果。

這樣就算依賴層數很多,也能夠藉由快取前幾階段的結果快速進展到要測試的範圍。

不只是 Monorepo

NX 的某些功能在單一專案下也有很大的幫助,像是生成元件跟測試結果快取,就算沒有要做 monorepo ,也能考量需不需要為了這些方便的功能而引入 NX 工具。


上一篇
Next.js 的 module federation 問題
系列文
組裝前端開發工具箱,從 NX 入手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言