Npm 私有仓库 Nexus 的使用

date
May 22, 2022
slug
rhwcqdts
status
Published
tags
前端
summary
type
Post
 
公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等。

安装 Nexus

官网下载Docker 方式安装,目前 Nexus 3 支持下面类型:
notion image
使用管理员账号登陆,进行服务配配置。

添加 npm 私有源

notion image
点击在左侧菜单 Repositories,可以看到仓库类型列表,如下:
notion image
npm 仓库有三种类型:
  • hosted:表示本机私有,即私有包存放的位置。这里Deployment policy需要选择Allow redeploy,方便同一个包能支持二次发布。
  • group:用于聚合管理,如果内部包括了 hosted 和 proxy,首先会从 hosted 取,若无则从 proxy 取并缓存,下次则会从缓存取
建议将 npm 仓库存储到一个 Storage,利于节约空间。
notion image
所以不管内部有多少个 hosted 或 proxy,都推荐使用 group 方式,这样子对外出口保持只有一个。
notion image
notion image
notion image

使用 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 认证
在 Realms 菜单中,将 npm Bearer Token Realm 添加到 Active 中
notion image
2、创建 Nexus 的 npm 发布专属账户
依次点击:Administration → Security → Roles,新建一个npm_publisher角色,添加下面权限:(我为了简便,喜欢添加带通配符*的权限策略)
nx-repository-view-npm-npm-hosted-addnx-repository-view-npm-npm-hosted-editnx-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: abcPassword:Email: (this IS public) abc@devops.comLogged in as abc on https://localhost:8081/repository/npm-hosted/.
上传包,更多的教程请参见npm 发包者必读
npm publish
4、最后在 Nexus 上选择 npm-group 的 browse,就能看到对应包文件
notion image

参考资料:

© 刘德华 2020 - 2023