npm发包私有仓库踩坑记

2,008 阅读2分钟

前言

之前包一直发布在npm上,公司搞了私有仓库后发布时发现找不到对应版本,牵扯出了一系列问题及排查问题方案

npm源

查看当前npm源命令如下

npm get registry

设置源命令如下

npm set registry https://xxxxx

命令比较简单,但对于频繁切换源这种方式较为麻烦,而且源地址不容易记忆,这就引出了管理源的主角nrm

nrm

安装nrm

npm install -g nrm

查看源

$ nrm ls

  npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.cloud.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
  taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/

添加源

 nrm add test https://test.com

切换源

nrm use test

删除源

nrm del test

使用nrm切换源变得非常容易

cnpm同步资源

npm发包完成并不会立即同步到淘宝源,此时通过淘宝源无法安装插件。

公司私有仓库映射的是淘宝源,所以发布npm完成后需要手动更新一次淘宝源插件,在淘宝源查询需要更新的插件,如qjd-ui-hooks,点击页面SYNC按钮即可,如下

ig1.png

更新完成如下

ig2.png

此时在通过淘宝源可安装插件

登录私有仓库

登录私有仓库和登录npm一样

$ npm login
Username: fe
Password: xxxxxx
Email: (this IS public) xxxxxx@xxxx.com
npm ERR! code E401
npm ERR! 401 Unauthorized - PUT xxxxxxx-/user/org.couchdb.user:fe

报错提示无权限,经查询删除.npmrc文件中私有源对应的_authToken即可,但多次尝试并没有作用

后找同事电脑多次尝试,有的可以登录有的不可以。后来大佬给我装了docker,弄了两个容器,node版本一个是12.22.8一个是16.16.0,发现高版本的可以登录,低版本无法登录,至此可以确定问题是node版本的问题

这里又有另外一个问题高版本node之前尝试前端工程安装失败,所以安装了低版本node,但发包到私有仓库又需要高版本,虽然大佬给我提供了docker,但终究使用不便(需加强docker的学习),所以使用另外一种方案处理node版本的问题:nvm

nvm

nvm可以像nrm一样随意切换node版本

安装

  1. 打开链接 ,下载 nvm-setup.zip
  2. 若安装了node,请提前卸载
  3. 安装nvm-setup.zip解压后的应用
$ nvm -v
1.1.10

看到版本号表示安装成功

使用

安装不同版本node

nvm install 12.22.8
nvm install 16.16.0

使用某个版本node

nvm use 16.16.0

查看所以版本node

$ nvm ls

  * 16.16.0 (Currently using 64-bit executable)
    12.22.8

切换不同版本要注意的是环境不同,不同环境安装过的插件需要重新安装,如在12.22.8安装了nrm,切换到16.16.0需要重新安装nrm

切到高版本node后重新登录

$ npm login
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
npm notice Log in on https://xxx.xxxx.com/xxx/xxx/xx-xx/
Username: fe
Password: xxxxxx
Email: (this IS public) xxxxxx@xxxxx.com
Logged in as fe on https://xxx.xxxx.com/xxx/xxx/xx-xx/.

登录成功,执行npm publish发包即可

结语

测试源已经成功,坐等公司正式私有仓库支持publish