使用 Nexus3 Repository Manager 搭建 npm 私服

/ 前端 / 没有评论 / 963浏览

下载安装

在官网下载 Nexus Repository Manager OSS 3.x, 解压至任意位置. 管理员运行cmd, 切换到 nexus-3.58.1-02/bin 目录

 ./nexus start

第一次要耐心等待一会,等待启动完毕后,

浏览器访问http://127.0.0.1:8081, 点击右上角 Sign In 登陆, 默认账号: admin 密码: admin123

添加npm仓库

点击左侧菜单Repositories,点击 Create repository

image-20231008094238110

看到仓库类型列表

image-20231008094422165

npm(group)表示分组 npm(hosted)表示本机私有 npm(proxy)表示远程代理。

若registry配置为group(包括hosted和proxy),首先会从hosted取,若无则从proxy取并缓存,下次则会从缓存取。

添加npm(proxy)

输入 Name: npm-proxy, remote storage 填写 https://registry.npm.taobao.org 或 https://registry.npmjs.org. 用于将包情求代理到地址地址

image-20231008100046696

最后点击下方的 Create repository

添加npm(hosted)

再次点击Create repository按钮,增加npm(hosted)输入 Name: npm-hosted, 点击下方的 Create repository

添加npm(group)

再次点击Create repository按钮,增加npm(group)输入 Name: npm-group,Member repositories里选择之前添加的2个移动右边

image-20231008100536191

配置与验证npm仓库

查看并设置nodejs的默认仓库地址

npm config get registry  #http://registry.cnpmjs.org/
npm config set registry http://x.x.x.x:8081/repository/npm-group/

验证仓库地址

#随便进入一个目录
初始化package
npm init -y
# 查看是否从自己的仓库地址拉取包
npm --loglevel info install jquery

image-20231008101249274

从上图中可以看到,fetch地址即为私服地址。

查看刚搭建的私服里的内容为空, 在安装了依赖包后,就会有一些被缓存了,下次请求就不会走外网了

发布包到私服

npm发布包是需要先登录的,默认是登录到npm官方服务器,若registry已更改为其它地址则可能登录失败,而这里我们只是想把包发布到自己私有的服务器上。

添加权限认证

设置权限, Realms 菜单, 将 npm Bearer Token Realm 添加到右边

image-20231008101807669

创建角色

创建nx-deploy角色 给角色赋于一个nx-repository-view-*-*-*权限

image-20231008101953880

创建用户

创建deployer 用户,密码也为 deployer,同时设定角色为nx-deploy

image-20231008102236283

客户端的.npmrc配置

registry=http://x.x.x.x:8081/repository/npm-group/
email=email@maruifu.cn
always-auth=true
_auth="ZGVwbG95ZXI6ZGVwbG95ZXI="

_auth是 username:password 的base64值,这样设置的好处是publish时就不用login了。

该文件是当前用户目录下的.npmrc文件

发布控件到npm私服中

在package.json 配置

"publishConfig" : {
    "registry" : "http://localhost:8081/repository/npm-hosted/"
  }

在包根目录执行npm publish即可

注意:发布是npm-hosted,不是npm-group.

# 若不想在package.json配置,也可以在命令行指定
npm publish --registry=http://localhost:8081/repository/npm-hosted/

Nexus3数据备份迁移

内网环境下,很多包需要从外网移入,可以把相关包在外网安装测试成功后,然后将缓存的包直接复制到内网即可。

Linux

仓库迁移

Nexus的构件仓库都保存在sonatype-work目录中,该目录的位置由nexus/conf/nexus.properties配置文件指定。 仓库迁移需要两个过程:备份和还原

备份仓库

将sonatype-work文件夹整体备份即可,也可以选择只备份最重要的两个文件夹索引(indexer)和仓库(storage)

还原仓库

将备份好的sonatype-work文件拷贝到新的服务器中。然后修改nexus/conf/nexus.properties配置文件,重新指定仓库的目录。

Windows

仓库迁移

Nexus的构件仓库都保存在sonatype-work目录中,该目录的位置由bin/nexus.vmoptions配置文件指定(Dkaraf.data)。 仓库迁移需要两个过程:备份和还原

备份仓库

将sonatype-work文件夹整体备份即可,也可以选择只备份最重要的两个文件夹索引(indexer)和仓库(storage)

还原仓库

将备份好的sonatype-work文件拷贝到新的服务器中。然后修改bin/nexus.vmoptions配置文件,重新指定仓库的目录。