簡體   English   中英

如何在派生的lib中使用DefinetelyTyped?

[英]How to use DefinetelyTyped in a forked lib?

我不得不分叉libA只是為了更新其依賴項之一。 LibA本身沒有打字稿定義,但是在DefinitelyTyped中有一個條目。

如何將DefinitelyTyped與我的fork匹配(因為我的fork不匹配相同的名稱,並且現在為@ myrepo / libA)?

在我使用之前:

import libA, {libAProps} from 'libA';

一種可能的解決方案是保持導入不變,但使用tsconfig.jsonpaths選項將模塊“重寫”到您的fork中。 這樣,TypeScript仍將使用libA來查找類型定義,但實際的代碼來自您的派生。

{
  "compilerOptions": {
    "baseUrl": ".", // This must be specified if "paths" is.
    "paths": {
      "libA": ["node_modules/@myrepo/libA"] // This mapping is relative to "baseUrl"
    }
  }
}

這可能是一個常見的問題,我也遇到過。 我的解決方案:

我沒有更改軟件包名稱(或范圍),而是將forks發布到自托管的npm注冊表中:

我正在使用Docker Compose運行本地Verdaccio npm官方注冊表registry.npmjs.org被配置為上行鏈路,因此Verdaccio成為透明的覆蓋層,我可以在本地發布自己的fork版本,並且仍然可以從官方注冊表中獲取其他軟件包。

由於不需要更改fork的程序包名稱,因此DefinitelyTyped程序包仍在工作。

請注意,解決方案不是最佳的:

  1. 額外的維護成本(但可能會有更多好處,例如Verdaccio充當緩存,從而加速了以后的npm安裝)
  2. 哪些軟件包或軟件包版本是本地發布的派生還不是很明顯。

關於2.,我通過將自定義預發行版本手動添加到原始程序包版本中建立了某種解決方案。 例:

  • 原始版本: 1.0.2
  • 版本的前叉: 1.0.2-sbusch.1

對於需要構建和發布的其他補丁,我將最后一位數字增加到1.0.2-sbusch.2 1.0.2-sbusch.3 ,依此類推。 根據semver.org ,由於預發行版本的優先級較低,因此npm outdated (我經常運行)總是將已安裝的派生顯示為可用升級。 (注意: 1.0.3-sbusch.1在實踐中可能會更好地工作,因為它表示“下一個正式的,即將發行的版本的預發行版。”但是尚未嘗試過)

我嘗試過的其他解決方案: npm linkyarn linknode_modules符號鏈接。 他們的經驗很差,因為他們跳過了常規的構建/發布/安裝工作流程,而您使用的是它們的源代碼,而不是他們的(編譯的)構建。

任何反饋,不勝感激!

暫無
暫無

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

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