NEXUS 私服同样有三种类型:
-
Hosted 仓库:
- 定义:
Hosted仓库是本地托管的仓库,用于存储内部构建的构件或第三方构件 - 用途:主要用于存放组织内部开发的构件,如
Maven构件、NPM包等 - 特点:完全由本地管理,可以进行上传、删除等操作
- 定义:
-
Proxy 仓库:
- 定义:
Proxy仓库是远程仓库的代理,用于缓存从远程仓库下载的构件。 - 用途:主要用于代理公共仓库,如
Maven Central、JCenter等,减少对外部网络的依赖,提高构建速度 - 特点:自动缓存从远程仓库下载的构件,当本地没有某个构件时,会从远程仓库下载并缓存到本地
- 定义:
-
Group 仓库:
- 定义:
Group仓库是一个虚拟仓库,它将多个仓库(包括Hosted和Proxy仓库)组合在一起,提供统一的访问点 - 用途:主要用于简化客户端配置,客户端只需要配置一个
Group仓库地址,即可访问多个仓库中的构件。 - 特点:客户端请求构件时,
Group仓库会按顺序检查其成员仓库,找到后返回给客户端
- 定义:
总结:
-
Hosted 仓库:用于存储内部构件
-
Proxy 仓库:用于代理远程仓库,缓存构件
-
Group 仓库:用于组合多个仓库,提供统一的访问点
前端如何使用
-
对接 NEXUS 过程中,需要开通对 NEXUS 某个 Hosted Bucket 的权限,之后上传的 npm 包都将存储在 这个 Bucket 中
-
后续的 下载 npm 包的
registry也要指向此 Bucket, 否则会出现401。 注意,在 NEXUS 中存在多个 Bucket,一旦上传设置为A Bucket, 那么下载的registry也需要指向A Bucket -
在 业务仓库第一次执行 install 之前,我们需要在本地初始化一下 私有的
npm registry,执行下面的命令, 执行的目的是让开发者具有访问私有npm包的权限 (此时的注册是针对全局的 npm registry, 此时在 ~/.npmrc 能看到 已经注册 registry npmToken)
npx npm-proxy-login https://priveta-registry username password email
4. 案例,当我们的 私有 npm 包上传到 web-bct-npm-custom, 我们的下载也需要指定到此 Bucket
// .npmrc
@osl:registry=https://xxxx/web-bct-npm-custom/
registry=https://registry.npmjs.org/
5. 结论: 当项目第一次 install private package 的时候,一定要保持系统根目录的 .npmrc 的 registry 和 项目的 .npmrc 注册的 registry 保持一致
// case1
// 根目录 .npmrc
xxxx/bct-npm-custom/:_authToken=NpmToken.213asdsad-adssad-asdsad
// 项目目录 .npmrc
@osl:registry=https://xxxx/bct-npm-public/
registry=https://registry.npmjs.org/
// 结果 单独 install 下载失败 (此时没有 lock 文件, 单独 install 指定的 privete package)
// case2
// 根目录 .npmrc
xxxx/bct-npm-custom/:_authToken=NpmToken.2bf44754-6ecf-3361-a76f-79d25e781153
// 项目目录 .npmrc
@osl:registry=https://xxxx/bct-npm-custom/
registry=https://registry.npmjs.org/
// 结果 单独 install 下载成功 (此时没有 lock 文件, 单独 install 指定的 privete package)
6. 在前端仓库第一次 install 私有 npm 包之后,会生成对应的 package-lock.json, 此时 私有的 npm 包的 resolved 指向一定和 .npmrc 的 指向保持一致,否则会出现 401 情况
- 在
CI Runner中, 执行的install逻辑和本地不同,CI runner中需要提供npmToken帮助其实现 私有package下载 - 通过如下在
gitlab-ci.yaml中配置,重置项目的.npmrc文件,实现通过npmToken下载
// gitlab-ci.yaml
....
script:
- npm get
- echo "//xxxx/web-bct-npm-custom/:_authToken=NpmToken.$NPMTOKEN">.npmrc
- echo "registry=https://registry.npmjs.org/">>.npmrc
- cat .npmrc
- npm ci
....