
hel-micro-node 是 hel+下面的一个子模块,专注于提供node端模块联邦解决方案,相比竞品 @module-federation/node,提供更多独有特性,接入更简单,使用更方便。
维度/方案 | Hel+(hel-micro-node) | @module-federation/node |
|---|---|---|
版本化 | ✅基于hel-meta.json | ✅基于Manifest |
更新文件头静态导入模块 | ✅允许免启动服务更新 | ❌必须启动服务才能更新 |
平台化 | ✅配套提供https://github.com/Tencent/hel/tree/main/helpack | ❌无相关方案 |
免构建 | ✅仅引入sdk映射关系即可 | ❌必须使用webpack并搭配复杂的配置文件构建你的node应用 |
双模驱动 | ✅即是npm传统模块也是微模块 | ❌只能作为远程模块身份使用 |
上手简易度 | 🌟🌟🌟🌟🌟简单快捷,仅需引入sdk | 🌟🌟较难,需对构建工具层改造 |
● 免构建:
无需像@module-federation/node方案那样,使用webpack构建你的node应用才能使用服务端模块联邦技术, 仅需引入 hel-micro-node sdk 即可。
● 平台化:
通过helpack控制台来让服务器在运行期间载入新版本,helpack会通过web-socket长连接将版本更新消息通知到各个使用了hel-micro-node的node服务。
执行以下命令可运行平台化示例
git clone https://github.com/Tencent/hel
cd helpack
npm run build:server
npm run server
npm run user然后访问localhost:7776, 点击图中的红圈处文字会跳转到本地helpack平台

再点击下图红圈位置可切换服务载入的示例模块到新版本

此外,我们还能查看使用此模块的服务器环境数据(注:需要sdk端自己上报)
环境准备:node 版本 18,系统 mac OS,hel-micro-node示例我们通过以下命令行操作步骤获得
# 下载仓库源码
git clone https://github.com/Tencent/hel
# 进入helpack 目录(关于服务端模块联邦的演示在此目录下)
cd helpack
# 安装依赖
pnpm install
# 运行 node 示例
pnpm --filter hm-node-user-simple run start项目接入
使用 npm 命令行安装 sdk
npm i hel-micro-node入口文件里使用 mapAndPreload 接口映射你的node模块为远程模块并预加载后,再启动你的服务,然后服务里的其他文件的头部可静态导入并使用此模块。
● 映射并预加载
const { mapAndPreload } = require('hel-micro-node');
async function main() {
// 注释掉此映射关系,则使用的模块来自 node_modules 目录
await mapAndPreload({ '@hel-demo/mono-libs': true });
require('./server');
}
main().catch(console.error);● 使用远程模块
const http = require('http');
const { hello } = require('@hel-demo/mono-libs');
const server = http.createServer(async (req, res) => {
res.writeHead(code, { 'Content-Type': 'text/plain' });
res.end(`hello remote mod: ${hello()}`);
});发布远程模块
hel init remote-lib-project
cd remote-lib-project
pnpm i具体发布流程参考:
https://tencent.github.io/hel/docs/tutorial/hel-mono/hel-mono-use
当你的node服务需做到以下任意一项提效时,都可以使用hel-micro-node来解决。
● 减少镜像编译次数,节约平台磁盘空间
一次镜像编译通常都会是几个G,模块联邦仅需要部署子模块不到1M的产物到cdn即可,宿主不再需要走编译代码、发布镜像过程,大大降低了部署平台的镜像存储空间。
● 提高模块分发效率,降低上线时间
由于模块可动态下发到服务中,不需要服务重启,当模块被多个宿主使用时,可做到对单个模块的一次部署,所有使用的宿主可立即生效的效果。
● 更快的模块回滚速度,提高运维效率
当需要回滚到某个版本时,仅需要通过模块管控平台或人工调用api操作即可,可做到秒级回滚。
👉 Github 仓库:https://github.com/Tencent/hel/tree/main/packages/hel-micro-node