基于 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)HUAWEI DevEco Studio 5.x (API 11、API 12) HarmonyOS Developer管理中心套件货架 目前只有这个版本的包含离线鸿蒙开发依赖 ohpm-repo,官方文档以及报错信息还是稀烂,基本找不到有用信息,需要自己研究。

注意: 目前测试发现 DevEco Studio 4.1.3.500 版本无法真机调试 C++ 代码。 DevEco Studio 4.1.3.501 版本可以正常调试。

截止 2024/04/01 最新Release版本是 DevEco Studio 4.1.3.700,最新测试版本 DevEco Studio 5.0.3.100(SP1),可惜编译不通过,报错如下:

DevEco Studio 4.1.3.501 使用的官方SDK下载地址:

下载完成后,解压缩到 SDK 目录下的 HarmonyOS-NEXT-DP1 目录即可,如下图:

安装并缓存  ohpm-repo 依赖

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

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

我们需要修改成我们内网服务器的地址(注意:要严格区分 npm 路径与 ohpm 路径,两者经常出现包名相同,但是互不通用的情况

假定:

npm:  http://158.220.155.188/repository/npm 

ohpm:  http://158.220.155.188/repository/ohpm

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

针对 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. 新建项目,编译调试。

五、可能遇到的问题

1. 现实使用中,我们部署上去的文件存在问题,然后替换成正确的版本,但是中间有些用户已经更新到有问题的版本了,导致编译报错。可能会遇到不管用户如何清理缓存,删除当前用户下的 .hvigor 目录,甚至重装编译器,都不能解决报错。 这时候,Windows 用户需要注意, 在 C:\Users\XXXX\AppData\Local 目录下(XXXX为当前用户名)存在一个名为 pnpm-cache 的目录,这个目录下存在一系列的缓存文件,尝试删除一下这个目录试试。 

2. 部署下载完成后的软件包之后,如果在执行 ohpm update 的时候报错:

检查之后,会发现各个软件包都是正常的,但是就是不断报错。

这个问题产生的原因是部分被 Verdaccio 处理之后的 package.json ,无法被 ohpm 正常解析。

解决方法是手动去 ohpm 网站下载,类似如下:

3. 针对 crypto-js 这个包,我们会发现 

返回的数据是完全不同的,但是自动依赖解析,尤其是多个 NPM 源的情况下,可能会出现依赖错误,导致各种报错。我们需要手工分析真实依赖,再完成导入。

参考链接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注