首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当与NPM收缩包装一起使用时,npm的艺术性依赖重写失败。

当与NPM收缩包装一起使用时,npm的艺术性依赖重写失败。
EN

Stack Overflow用户
提问于 2016-09-09 15:39:09
回答 1查看 852关注 0票数 0

我们正在运行Artifactory 4.7.7 rev 40199,目的是让我们所有的NPM流量都通过Artifactory。对于npm-shrinkwrap和外部依赖项重写的组合,我们遇到了问题。

我们目前的设置如下所示

  • NPM -虚拟的(虚拟回购指的是NPM与项目.npmrc文件.按此顺序指向下面的存储库。是否为Github) 设置了外部依赖项重写
    • npm-本地(本地回购我们自己的包裹)
    • 注册表-npmjs-org(用于从官方NPM注册中心缓存包的远程回购)
    • npm- Github -重写(用于缓存重写的Github存储库的远程回购)

我们所看到的问题可以通过以下方法复制

  • npm install具有Github依赖项的包(jsdoc@3.4.0)
  • Artifactory重写并缓存Github依赖项(taffydb & esprima)
  • npm shrinkwrap来锁定版本
  • 删除node_modules
  • 运行npm install

由于Node设置为不使用我们的代理,第二个npm install在以下消息中失败

代码语言:javascript
复制
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

  1. npm-shrinkwrap.json只包含对Artifactory的引用。该文件中没有GitHub引用。
  2. 这个包的本地缓存版本将它的_resolved_fromtarball属性设置在它的package.json (存储在tgz旁边)中,将其设置为Arti城urls/ version
  3. 本地缓存的版本在它的repository.url属性中确实有一个对Github的引用
  4. 该软件包的已安装({INSTALL_DIR}/node_modules/taffydb/package.json)版本在其_resolved_fromtarball属性中的package.json设置为Artifactory /versions`‘
  5. 原始包(jsdoc@3.4.0)的工件缓存版本在tgz中似乎没有改变它的package.json
  6. 原始包的Artifactory信息选项卡确实有一个GitHub URL,而不是另一个包(taffydb)的版本号。
  7. 已重写的标牌(taffydb)的版本出现在正确的回购(npm-github-rewrite)中,其未打包的package.json似乎没有变化。
EN

回答 1

Stack Overflow用户

发布于 2016-09-11 22:48:43

看起来,NPM客户端在构建NPM -wrap.json文件时依赖于安装包的package.json文件中的"_resolved“字段(请参阅这个客户端代码),我相信NPM客户端一旦安装它就会添加到package.json中。从那时起,客户端只需跟踪该文件中随后的安装尝试,因此如果其中一个依赖URL指向某个不是Artifactory的东西,它就会出现在那里(也不考虑您的~/..npmrc注册表URL,请参见这一讨论)

虽然Artifactory在package.json中重写了"tarball“字段,但到目前为止,即使它可以以某种方式故意更改_resolved字段,但它目前并没有这样做,当然,假设存在这样一个场景,即您实际上将从Artifactory获得一个包,该包具有一个无关的"_resolved”字段,尽管它是从Artifactory解决的--我甚至不确定它是否可能实现(我们碰巧为此拥有了特征请求,尽管我不能确定它是否会被实现)。

EDIT/Clarification --我不确定"_resolved“字段是否纯粹是一个客户端字段,不能存在于注册表中的包中,在这种情况下,它听起来可能超出了Artifactory应该处理的范围。

尽管如此,当我运行您的再现步骤(从artifactory解析)时,npm-收缩包装. when文件中只有我的工件URL,用于所有的依赖项,这对您来说似乎不是这样的。我认为这很可能是因为以下两种原因之一:

1.您的Artifactory缓存包含“taffydb”包的原始(非重写)副本--尽管考虑到您能够在第一次尝试中安装它,我认为这不太可能。2.或者,NPM缓存(~/.npm/)或全局node_modules dir包含“taffydb”包的原始副本。

总之,您应该能够通过检查{INSTALL_DIR}/node_modules/taffydb/package.json文件来验证这一点,并检查"_resolved“字段的值。您还可以尝试将其修改为您的Artifactory URL,并查看它在重新生成时是否修复了npm收缩的Wrap.json文件。

HTH,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39415203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档