Npm私有仓库Nexus的使用

588 阅读3分钟

公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等。

安装 Nexus

官网下载Docker 方式安装,目前 Nexus 3 支持下面类型:

使用管理员账号登陆,进行服务配配置。

添加 npm 私有源

点击在左侧菜单 Repositories,可以看到仓库类型列表,如下:

npm 仓库有三种类型:

  • hosted:表示本机私有,即私有包存放的位置。这里Deployment policy需要选择Allow redeploy,方便同一个包能支持二次发布。
  • proxy:表示远程代理,可代理npmjs 官方源淘宝源
  • group:用于聚合管理,如果内部包括了 hosted 和 proxy,首先会从 hosted 取,若无则从 proxy 取并缓存,下次则会从缓存取

建议将 npm 仓库存储到一个 Storage,利于节约空间。

所以不管内部有多少个 hosted 或 proxy,都推荐使用 group 方式,这样子对外出口保持只有一个。

使用 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 中

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,就能看到对应包文件


参考资料: