簡體   English   中英

npm 當 package 具有公共依賴項時,私有 package 安裝失敗

[英]npm install of private package fails when package has public dependencies

假設我有一個私有的 npm 存儲庫,托管在JFrog artifactory中: https://my-domain.com/artifactory/api/npm/my-repo 在這個存儲庫中,我發布了一個 npm package: my-package ,構建良好。 my-package依賴於(或更多)公共 npm,例如lodash

但是,當我創建一個新項目並嘗試安裝my-package時,出現以下錯誤:

$ npm install my-package --registry https://my-domain.com/artifactory/api/npm/my-repo
npm ERR! code E404
npm ERR! 404 Not Found - GET https://my-domain.com/artifactory/api/npm/my-repo/lodash - not_found
npm ERR! 404
npm ERR! 404  'lodash^4.17.11' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'my-package'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\<username>\AppData\Roaming\npm-cache\_logs\2019-04-29T12_47_51_647Z-debug.log

當我在運行npm install時指定--registry選項時,似乎npm正在我的私有存儲庫中搜索my-package所需的所有依賴項。 但是, my-package依賴於公共依賴項,這些依賴項不在我的私有注冊表中。

我的問題

如何從具有公共依賴項的私有注冊表安裝 npm package? 也許這也只是 JFrog 的問題?

任何幫助將不勝感激!

通過使用以下命令指定注冊表: --registry https://my-domain.com/artifactory/api/npm/my-repo npm 正在嘗試從您的私有存儲庫位置解析所有必要的包,按名稱和版本domain.com/artifactory/api/npm/my-repo

要解決您的私有庫所依賴的這些公共依賴項,您有兩種選擇:

  1. 設置一個虛擬 Npm 注冊表。 (推薦這種方法)
  2. 在您的私有存儲庫中打包所有必要的依賴項。

Artifactory 中定義的虛擬存儲庫聚合來自本地和遠程存儲庫的包。 這允許您從為虛擬存儲庫定義的單個 URL 訪問本地托管的 npm 包和遠程代理的 npm 注冊表

通過設置一個引用您的私有存儲庫位置和默認公共 npmjs 位置的虛擬存儲庫,您將能夠通過指定上述注冊表來下載您的私有庫以及任何公共 npm 包。

既然您提到了JFrog ,請查看他們的 confluence頁面,該頁面將引導您完成創建虛擬存儲庫的過程。

但是,如果您決定使用選項 2,則必須將所有必要的依賴項打包到您的私有存儲庫中。 然后您的私有庫將能夠正確提取它所依賴的依賴項。 我建議不要使用這種方法,因為您將復制npmjs已經提供的工作,並且您還必須不斷更新您的私有存儲庫以包含新庫或現有庫的更新版本。

希望這會有所幫助!

我的解決方案...

涉及更新我的.npmrc文件:

我更改了registry=https://npm.pkg.my-domain.com

@my-private-scope:registry=https://npm.pkg.my-domain.com

這就是為什么

在其中,我指定了registry=https://npm.pkg.my-domain.com (后跟我的身份驗證令牌),這樣我就可以從 @my-private-scope scope 導入私有 package。但是因為我留在@my-private-scope:部分,我正在為所有禮儀更改 URL,而不僅僅是我的私人組織的一部分。 我進行了更改以僅針對該 scope 的依賴項指定我的域 URL。

暫無
暫無

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

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