2016-09-09 29 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

相关问题