关于利用阿里cnpmjs搭建的私有库修改registryHost不生效的问题

关于阿里cnpmjs自建私有库修改registryHost不生效的问题

问题复现

在搭建初期,将config/index.js中的registryHost配置项设置为'127.0.0.1:7001'
然后测试时发现本地安装包正常,但其他客户机安装包会报错如下:

npm ERR! code ECONNREFUSED
npm ERR! syscall connect
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to http://127.0.0.1:7001/@test-scp/test-pkg/download/@test-scp/test-pkg-1.0.0.tgz failed, reason: connect ECONNREFUSED 127.0.0.1:7001
...

因此,将config/index.js中的registryHost配置项设置为'registry.xxx.org',即改为Nginx反向代理后的注册服务器名。重启cnpmjs服务后再次在其他客户机上测试安装包。但可惜,报错依旧。

排查方法

进一步排查npm缓存日志(存放在C:\Users\Administrator\AppData\Local\npm-cache\_logs):

...
33 http fetch GET 200 http://registry.xxx.org/@test-scp%2ftest-pkg 216ms (cache revalidated)
...

注意到这一行最后的cache revalidated,意味着就算改了registryHost并重启了服务,但安装之前的@test-scp/test-pkg包时还是会获取到之前的缓存。可以在浏览器中手动请求一下并从返回的JSON中找到tarball属性:

...
"tarball":"http://127.0.0.1:7001/@test-scp/test-pkg/download/@test-scp/test-pkg-1.0.0.tgz"
...

果然,这里返回的JSON还是修改registryHost并重启服务之前的缓存,所以仍然会报之前的错误,造成了一种修改registryHost不生效的假象。

解决方案

既然存在缓存这种东西,心思应该是有可配置选项的。在config/index.js中找到了一个registryCacheControlHeader配置项,注释描述为:

  // registry http response cache control header
  // if you are using CDN, can set it to 'max-age=0, s-maxage=10, must-revalidate'
  // it meaning cache 10s on CDN server and no cache on client side.

但奇怪的是并没有使用CDN,该项也维持着默认值:’’

换个思路,只要将缓存更新就能够通过测试。因此,不如直接发布一版新的@test-scp/test-pkg包(手动滑稽)。注意,发布之前需要改动包的版本号才能发布成功:

- 当要发补丁版时可运行命令:`npm version patch`
- 当要发小版本时可运行命令:`npm version minor`
- 当要发大版本时可运行命令:`npm version major`

当然,手动改package.json中的版本号应该也可以

登录之后再npm publish就行。这样将缓存更新之后再在其他客户机上测试安装@test-scp/test-pkg包就可以成功了,也就是说修改registryHost实际上是生效的(废话,手动滑稽)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值