我们正在运行Artifactory 4.7.7 rev 40199,目的是让项目的所有NPM流量通过Artifactory。对于Github,npm-shrinkwrap
和外部依赖关系重写的组合存在问题。
我们的设置目前看起来像这样
我们看到的问题可以通过以下
复制npm install
包含Github依赖项(jsdoc@3.4.0
)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'
由于某些原因,收缩包装的存在似乎完全忽略了依赖重写规则,并且只是尝试去Github。
我们错过了什么吗?我们缺少一些设置步骤吗?
基于@ uriah-l post
的其他详细信息npm-shrinkwrap.json
仅包含对Artifactory网址的引用。该文件中没有GitHub引用。_resolved
,_from
和tarball
属性,其package.json
(存储在tgz旁边)设置为Artifactory网址/版本repository.url
属性{INSTALL_DIR}/node_modules/taffydb/package.json
)版本中包含_resolved
,_from
和tarball
属性package.json
设置为Artifactory网址/版本jsdoc@3.4.0
)的神器缓存版本似乎在tgz中保持package.json
taffydb
)taffydb
)的pacakges版本出现在右侧仓库(npm-github-rewrite
)中,其解压后的package.json
似乎未更改答案 0 :(得分:1)
看起来NPM客户端在构造npm-shrinkwrap.json文件(参见this client code)时依赖于已安装软件包的package.json文件中的“_resolved”字段,我相信NPM客户端一旦安装完成,它就会添加到package.json中。从那时起,客户端只是在随后的安装尝试中跟随此文件中的任何内容,因此如果其中一个依赖关系URL指向不是Artifactory的东西,它将会去那里(也忽略你的〜/ .npmrc注册表URL,请参阅{{ 3}})
虽然Artifactory在package.json中重写了“tarball”字段,但是,即使它可能故意以某种方式故意改变_resolved字段,它当前也不会这样做,当然假设事实上有一个场景你实际上会从Artifactory获得一个包含无关的“_resolved”字段的包,尽管它是从Artifactory中解决的 - 我甚至不确定它是否可行(我们确实碰巧有this discussion虽然我不能肯定地说它是否会被实施)。
编辑/澄清 - 我不确定“_resolved”字段是否纯粹是客户端字段,并且不能存在于注册表中的包上,在这种情况下,它听起来像是可能超出了Artifactory应该处理的范围。
话虽这么说,当我运行你的再现步骤(从Artifactory解析)时,npm-shrinkwrap.json文件中只包含了我所有依赖关系的神器URL,这对你来说似乎并非如此。我认为这很可能是由于以下任一原因造成的:
1.您的Artifactory缓存包含'taffydb'包的原始(未重写)副本 - 尽管我认为这不太可能,考虑到您可以在第一次尝试时安装它。 2.或者,您的NPM缓存(〜/ .npm /)或全局node_modules目录包含'taffydb'包的原始副本。
总而言之,您应该能够通过检查{INSTALL_DIR} /node_modules/taffydb/package.json文件来验证这一点,并检查“_resolved”字段的值是什么。您还可以尝试将其修改为Artifactory URL,并查看是否在重新生成时修复npm-shrinkwrap.json文件。
HTH,