Npm 私有仓库 Nexus 的使用

公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等。
安装 Nexus 官网下载或Docker 方式安装,目前 Nexus 3 支持下面类型:
Npm 私有仓库 Nexus 的使用
文章图片

使用管理员账号登陆,进行服务配配置。
添加 npm 私有源 Npm 私有仓库 Nexus 的使用
文章图片

点击在左侧菜单 Repositories,可以看到仓库类型列表,如下:
Npm 私有仓库 Nexus 的使用
文章图片

npm 仓库有三种类型:

  • hosted:表示本机私有,即私有包存放的位置。这里Deployment policy需要选择Allow redeploy,方便同一个包能支持二次发布。
  • proxy:表示远程代理,可代理npmjs 官方源或淘宝源
  • group:用于聚合管理,如果内部包括了 hosted 和 proxy,首先会从 hosted 取,若无则从 proxy 取并缓存,下次则会从缓存取
建议将 npm 仓库存储到一个 Storage,利于节约空间。
Npm 私有仓库 Nexus 的使用
文章图片

所以不管内部有多少个 hosted 或 proxy,都推荐使用 group 方式,这样子对外出口保持只有一个。
Npm 私有仓库 Nexus 的使用
文章图片

Npm 私有仓库 Nexus 的使用
文章图片

Npm 私有仓库 Nexus 的使用
文章图片

使用 npm 私有源
# 设置私有源 npm config set registry http://localhost:8081/repository/npm-group/ yarn config set registry http://localhost:8081/repository/npm-group/# 设置官方源 npm set registry https://registry.npmjs.org/ yarn set registry https://registry.npmjs.org/

如果提示unable to verify the first certificate,请执行yarn config set strict-ssl falsenpm config set strict-ssl false关闭证书校验。
不能连接私服时请切换回 Npm 官方源,对于通过nrm、配置文件(如.npmrc.yarnrc)等其他方式来管理源请自行处理。
另外一种更激进的办法时,内网通过 DNS 劫持,让官方源的地址代理内部私有服,这样子就能无缝切换。但如果内部源不稳定时,就没有备选方案了,所以慎重。
然后安装依赖时,就会从私有源去下载。同时已经下载过的包就被缓存到 Nexus 上,再次下载时就不会去公网下载了。
发布包到私服 不管是发布到 npm 官方源,还是内网的私有源,npm 发布包是需要先登录的。
1、设置 Nexus 支持 npm 认证
【Npm 私有仓库 Nexus 的使用】在 Realms 菜单中,将 npm Bearer Token Realm 添加到 Active 中
Npm 私有仓库 Nexus 的使用
文章图片

2、创建 Nexus 的 npm 发布专属账户
依次点击:Administration → Security → Roles,新建一个npm_publisher角色,添加下面权限:
nx-repository-view-npm-npm-hosted-add nx-repository-view-npm-npm-hosted-edit nx-repository-view-npm-npm-hosted-read

然后点击:Administration → Security → Users → Create User,新加一个用户abc,然后赋予npm_publisher角色的权限。
3、最后用该用户发布包到私服
登录用户
npm adduser -registry https://localhost:8081/repository/npm-hosted/Username: abc Password: Email: (this IS public) abc@devops.com Logged in as abc on https://localhost:8081/repository/npm-hosted/.

上传包,更多的教程请参见npm 发包者必读
npm publish

4、最后在 Nexus 上选择 npm-group 的 browse,就能看到对应包文件
Npm 私有仓库 Nexus 的使用
文章图片

参考资料:
  • 使用 Nexus3 Repository Manager 搭建 npm 私服
  • 将 npm 包发布在私有仓库 nexus 中
  • 将 npm 包发布在私有仓库(nexus)中操作步骤

    推荐阅读