NEXUS 踩坑理解

439 阅读3分钟

NEXUS 私服同样有三种类型:

  • Hosted 仓库

    • 定义Hosted 仓库是本地托管的仓库,用于存储内部构建的构件或第三方构件
    • 用途:主要用于存放组织内部开发的构件,如 Maven 构件、NPM 包等
    • 特点:完全由本地管理,可以进行上传、删除等操作
  • Proxy 仓库

    • 定义Proxy 仓库是远程仓库的代理,用于缓存从远程仓库下载的构件。
    • 用途:主要用于代理公共仓库,如 Maven CentralJCenter 等,减少对外部网络的依赖,提高构建速度
    • 特点:自动缓存从远程仓库下载的构件,当本地没有某个构件时,会从远程仓库下载并缓存到本地
  • Group 仓库

    • 定义Group 仓库是一个虚拟仓库,它将多个仓库(包括 HostedProxy 仓库)组合在一起,提供统一的访问点
    • 用途:主要用于简化客户端配置,客户端只需要配置一个 Group 仓库地址,即可访问多个仓库中的构件。
    • 特点:客户端请求构件时,Group 仓库会按顺序检查其成员仓库,找到后返回给客户端

总结:

  • Hosted 仓库:用于存储内部构件

  • Proxy 仓库:用于代理远程仓库,缓存构件

  • Group 仓库:用于组合多个仓库,提供统一的访问点

前端如何使用

  1. 使用到的 npm-proxy-login github 地址

  2. 对接 NEXUS 过程中,需要开通对 NEXUS 某个 Hosted Bucket 的权限,之后上传的 npm 包都将存储在 这个 Bucket 中

  3. 后续的 下载 npm 包的 registry 也要指向此 Bucket, 否则会出现401。 注意,在 NEXUS 中存在多个 Bucket,一旦上传设置为A Bucket, 那么下载的 registry 也需要指向 A Bucket

  4. 在 业务仓库第一次执行 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 的时候,一定要保持系统根目录的 .npmrcregistry 和 项目的 .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 情况

image.png

  1. CI Runner 中, 执行的 install 逻辑和本地不同,CI runner 中需要提供 npmToken 帮助其实现 私有 package 下载
  2. 通过如下在 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
 ....