公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等。
安装 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 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-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,就能看到对应包文件
参考资料:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。