Npm 私有仓库 Nexus 的使用
date
May 22, 2022
slug
rhwcqdts
status
Published
tags
前端
summary
type
Post
公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等。
安装 Nexus
使用管理员账号登陆,进行服务配配置。
添加 npm 私有源
点击在左侧菜单 Repositories,可以看到仓库类型列表,如下:
npm 仓库有三种类型:
- hosted:表示本机私有,即私有包存放的位置。这里
Deployment policy
需要选择Allow redeploy
,方便同一个包能支持二次发布。
- 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 false
和npm 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-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,就能看到对应包文件
参考资料: