基于 Verdaccio 搭建鸿蒙(HarmonyOS Next)开发的轻量级 Node.js 私有仓库

一、背景

最近在进行 HarmonyOS Next 应用开发,官方的 DevEco Studio 4.1 需要时候 Node.js,但是公司开发环境不支持外网访问,需要搭建内网的镜像服务器。下面,我们研究在内网服务器只使用 Apache(HTTPD)/Nginx 提供文件下载服务,不安装 NodeJs 搭建代理服务的方法来建立 NPM 文件下载代理。

执行缓存任务的设备是 MacBook Pro 2023 / macOS Sonoma 14.3

二、简介

1. 什么是 Verdaccio

“一个基于 Node.js 的轻量级私有仓库”。
平时使用 npm publish 进行发布时,上传的仓库默认地址是 npm,通过 Verdaccio 工具在本地新建一个仓库地址,再把本地的默认上传仓库地址切换到本地仓库地址即可。当 npm install 时没有找到本地的仓库,则 Verdaccio 默认配置中会从 npm 中央仓库下载。

注:Verdaccio 表示意大利中世纪晚期 fresco 绘画中流行的一种绿色的意思。

2. 优点
  • 私密性高,仅团队共享。
  • 安全性高,能够有效的防治恶意代码攻击。
  • 使用局域网,传输速度快。
3. 官网

三、准备环境

配置 verdaccio 从华为镜像服务器地址下载,默认配置服务器地址国内访问可能存在问题。另外注意禁用 npm-audit ,安全审计会非常非常慢,而且经常失败。

修改后的完整配置如下:

启动一个独立的Shell 运行 verdaccio 

清理缓存,并且要求通过 verdaccio 代理下载:

当前(2024/02/01)申请并通过了华为开发计划的才可以下载到 HarmonyOS NEXT 开发需要的 HUAWEI DevEco Studio 4.x 版本(API 11),目前只有这个版本的包含离线鸿蒙开发依赖 ohpm-repo  ,官方文档以及报错信息还是稀烂,基本找不到有用信息,需要自己研究。

安装并缓存  ohpm-repo 依赖

npm 安装包的缓存在 ~/.local/share/verdaccio/storage 目录下。

接下来需要逐个调整缓存包的 package.json 文件,这个文件里面其他包的依赖地址都被改成了 verdaccio/config.yaml 里配置的服务器地址,内网是访问不到这个地址的。

我们需要修改成我们内网服务器的地址(假定为: http://158.220.155.188/repository/npm )。

可以简单的执行如下命令即可:

针对 Apache(HTTPD) 2.4 服务器需要修改 httpd.conf 配置文件,增加对于 package.json 的默认访问。

增加如下内容:

重启服务:

之后,整个 ~/.local/share/verdaccio/storage 目录可以拷贝到 Apache(HTTPD) 2.4 的对应文件下载目录下即可。

Figure 1: The back-reference flow through a rule.
In this example, a request for /test/1234 would be transformed into /admin.foo?page=test&id=1234&host=admin.example.com.
Figure 1: The back-reference flow through a rule. In this example, a request for /test/1234 would be transformed into /admin.foo?page=test&id=1234&host=admin.example.com.

四、使用配置

上面介绍的是如何通过缓存建立内网的 NPM 代理服务器,下面我们讲一下如何使用我们刚刚配置好的缓存服务器。

编辑当前用户目录下的 .npmrc 文件(不存在则手工创建),增加如下内容:

1. 在内网下载从 HarmonyOS NEXT 开发需要的 HUAWEI DevEco Studio 4.x 版本(API 11) 下载到内网服务器上的HUAWEI DevEco Studio 4.x 安装包,并且解压缩。

2. 找到安装包目录下的 sdk 并解压缩到任意目录。

3. 安装 Node 18.19.0到内网开发机。

4. 编辑当前用户目录下的 .ohpm/.ohpmrc 文件(不存在则手工创建),增加如下内容:

5. 新建项目,编译调试。

参考链接