2016-09-09 27 views
0

我們正在運行Artifactory 4.7.7 rev 40199,其目標是使項目的所有NPM流量都通過Artifactory。我們在和Github的External Dependency Rewrites的組合方面遇到了問題。用於NPM的Artifactory Dependency Rewrite在與npm-shrinkwrap一起使用時失敗

我們的設置目前看起來是這樣的

  • NPM-虛擬(虛擬即NPM是指向與.npmrc文件的項目回購協議。點順序下面的資料庫。有外部依賴重寫集彌補Github上)
    • NPM-本地(本地回購爲我們自己的包)
    • 註冊表npmjs,組織(緩存包從官方NPM註冊表
    • NPM-github上重寫(用於緩存遠程回購改寫Github上庫)遠程回購

我們所看到的問題是由以下可複製

  • npm install與Github上依賴([email protected]
  • Artifactory的重寫的封裝第二緩存G​​ithub的依賴(taffydb & esprima
  • npm shrinkwrap來鎖定版本
  • 刪除node_modules
  • 運行npm install

與節點設置爲不使用我們的代理,第二npm install失敗的以下信息

npm ERR! fetch failed https://github.com/hegemonic/taffydb/tarball/7d100bcee0e997ee4977e273cdce60bd8933050e 
npm WARN retry will retry, error on last attempt: Error: connect ECONNREFUSED 192.30.253.112:443 
npm ERR! fetch failed https://github.com/ariya/esprima/tarball/49a2eccb243f29bd653b11e9419241a9d726af7c 
npm WARN retry will retry, error on last attempt: Error: connect ECONNREFUSED 192.30.253.112:443 
npm ERR! fetch failed https://github.com/ariya/esprima/tarball/49a2eccb243f29bd653b11e9419241a9d726af7c 
npm WARN retry will retry, error on last attempt: Error: connect ECONNREFUSED 192.30.253.113:443 
npm ERR! fetch failed https://github.com/hegemonic/taffydb/tarball/7d100bcee0e997ee4977e273cdce60bd8933050e 
npm WARN retry will retry, error on last attempt: Error: connect ECONNREFUSED 192.30.253.113:443 
npm ERR! fetch failed https://github.com/ariya/esprima/tarball/49a2eccb243f29bd653b11e9419241a9d726af7c 
npm ERR! fetch failed https://github.com/hegemonic/taffydb/tarball/7d100bcee0e997ee4977e273cdce60bd8933050e 
npm WARN optional Skipping failed optional dependency /jsdoc/taffydb: 
npm WARN Error: connect ECONNREFUSED 192.30.253.113:443 
npm WARN  at Object.exports._errnoException (util.js:1012:11) 
npm WARN  at exports._exceptionWithHostPort (util.js:1035:20) 
npm WARN  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14) 
npm WARN { Error: connect ECONNREFUSED 192.30.253.113:443 
npm WARN  at Object.exports._errnoException (util.js:1012:11) 
npm WARN  at exports._exceptionWithHostPort (util.js:1035:20) 
npm WARN  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14) 
npm WARN code: 'ECONNREFUSED', 
npm WARN errno: 'ECONNREFUSED', 
npm WARN syscall: 'connect', 
npm WARN address: '192.30.253.113', 
npm WARN port: 443, 
npm WARN parent: 'jsdoc', 
npm WARN optional: '/jsdoc/taffydb' } 
npm ERR! Windows_NT 10.0.10586 
npm ERR! argv "D:\\Languages\\NodeJS\\node.exe" "D:\\Languages\\NodeJS\\node_modules\\npm\\bin\\npm-cli.js" "install" 
npm ERR! node v6.3.1 
npm ERR! npm v3.10.3 
npm ERR! code ECONNREFUSED 
npm ERR! errno ECONNREFUSED 
npm ERR! syscall connect 

npm ERR! Error: connect ECONNREFUSED 192.30.253.113:443 
npm ERR!  at Object.exports._errnoException (util.js:1012:11) 
npm ERR!  at exports._exceptionWithHostPort (util.js:1035:20) 
npm ERR!  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14) 
npm ERR! { Error: connect ECONNREFUSED 192.30.253.113:443 
npm ERR!  at Object.exports._errnoException (util.js:1012:11) 
npm ERR!  at exports._exceptionWithHostPort (util.js:1035:20) 
npm ERR!  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14) 
npm ERR! code: 'ECONNREFUSED', 
npm ERR! errno: 'ECONNREFUSED', 
npm ERR! syscall: 'connect', 
npm ERR! address: '192.30.253.113', 
npm ERR! port: 443, 
npm ERR! parent: 'jsdoc' } 
npm ERR! 
npm ERR! If you are behind a proxy, please make sure that the 
npm ERR! 'proxy' config is set properly. See: 'npm help config' 

由於某些原因,shrinkwrap的存在似乎完全忽略了依賴關係重寫規則,只是試圖去Github。

我們錯過了什麼嗎?我們缺少一些設置步驟嗎?


其他細節基於@烏-1後

  1. npm-shrinkwrap.json只包含引用artifactory的網址。該文件中沒有GitHub引用。
  2. 包的本地緩存版本有它的_resolved_from和它tarball性質的package.json(被儲存在該TGZ)設置爲artifactory的網址/版本
  3. 本地緩存版本確實有Github上的參考,在它的repository.url物業
  4. 包的安裝({INSTALL_DIR}/node_modules/taffydb/package.json)的版本有它在它_resolved_fromtarball性質是package.json設置爲artifactory的網址/ versions`
  5. 原包的artifactory的緩存版本([email protected])似乎有它在TGZ不變
  6. 的Artifactory的NPM信息標籤的原包裝是否有一個GitHub的URL,而不是其他的包(taffydb)版本號
  7. 是有pacakges的版本package.json被重寫(taffydb)都出現在右回購(npm-github-rewrite),他們的解壓package.json似乎是不變

回答

1

它看起來像NPM客戶依賴「_resolved」字段,其安裝包的的package.json內文件構建npm-shrinkwrap.json文件時(請參閱this client code),我相信NPM客戶端本身在安裝後會添加到package.json中。從這一點開始,客戶端只需在隨後的安裝嘗試中跟隨此文件內的任何內容,所以如果其中一個依賴URL指向非Artifactory的某個內容,它將會到達那裏(也不考慮您的〜/ .npmrc註冊表URL,請參閱this discussion)儘管Artifactory在package.json中重寫了「tarball」字段,但即使它可以故意改變_resolved字段,但它目前並不這樣做,假設當然有事實情況其中你實際上會從Artifactory獲得一個包含多餘「_resolved」字段的包,儘管它已經從Artifactory中解析出來 - 我甚至不能確定它甚至有可能(我們確實有a feature request,儘管如此我無法確定它是否會實施)。

編輯/澄清 - 我不知道的「_resolved」字段是否是一個純粹的客戶端領域,並在註冊表中包不能存在,在這種情況下,它聽起來像的東西,可能是外Artifactory應該處理的範圍。這就是說,當我運行你的複製步驟(從Artifactory解析)時,npm-shrinkwrap.json文件中只有我的artifactory URL用於所有依賴關係,這似乎並不適合你。我認爲這很可能是由於以下原因之一發生的:

1.您的Artifactory緩存包含'taffydb'包的原始(未重寫)副本 - 儘管我相信這種情況不太可能,考慮到您可以在第一次嘗試時安裝它。 2.或者,您的NPM緩存(〜/ .npm /)或全局node_modules目錄包含'taffydb'包的原始副本。總而言之,您應該可以通過檢查{INSTALL_DIR} /node_modules/taffydb/package.json文件來驗證這一點,並檢查「_resolved」字段的值是多少。您還可以嘗試將其修改爲您的Artifactory URL,並查看是否在重新生成時修復了npm-shrinkwrap.json文件。

HTH,

+0

感謝您的詳細回覆。我在原始問題的底部添加了一些額外的評論。 – XenoByteZero

相關問題