[英]How to use DefinetelyTyped in a forked lib?
我不得不分叉libA只是為了更新其依賴項之一。 LibA本身沒有打字稿定義,但是在DefinitelyTyped中有一個條目。
如何將DefinitelyTyped與我的fork匹配(因為我的fork不匹配相同的名稱,並且現在為@ myrepo / libA)?
在我使用之前:
import libA, {libAProps} from 'libA';
一種可能的解決方案是保持導入不變,但使用tsconfig.json
的paths
選項將模塊“重寫”到您的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程序包仍在工作。
請注意,解決方案不是最佳的:
關於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 link
, yarn link
, node_modules
符號鏈接。 他們的經驗很差,因為他們跳過了常規的構建/發布/安裝工作流程,而您使用的是它們的源代碼,而不是他們的(編譯的)構建。
任何反饋,不勝感激!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.