找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

852

积分

0

好友

120

主题
发表于 13 小时前 | 查看: 2| 回复: 0

项目简介

hel-micro-node 是 hel+ 生态下的一个子模块,它专注于为 Node.js 端提供模块联邦(Module Federation)解决方案。相较于另一个知名的竞品 @module-federation/node,hel-micro-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 🌟🌟 较难,需对构建工具层改造

功能特性

  • 免构建
    使用 hel-micro-node 无需像 @module-federation/node 方案那样,必须用 webpack 来构建你的 Node 应用才能享受到服务端模块联邦技术带来的便利。你只需要引入 hel-micro-node 这个 SDK 即可。

  • 平台化
    它配套提供了 helpack 控制台,允许服务器在运行期间动态加载模块的新版本。Helpack 会通过 WebSocket 长连接,将版本更新消息实时推送到各个集成了 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”的链接,即可跳转到本地部署的 helpack 平台管理界面。

HMN示例API测试页面,标记了如何访问本地helpack控制台

在 helpack 控制台中,你可以看到模块的版本列表。点击新版本旁边的“切换为线上”按钮,即可让服务无缝切换到新版本的模块,整个过程无需重启服务。

Helpack控制台模块版本管理界面,展示切换新版本操作

此外,平台还能展示使用了此模块的服务器环境数据(注:此功能需要 SDK 端主动上报环境信息)。

快速开始

示例运行

环境准备:Node.js 版本 18 或以上,系统不限。以下是获取并运行 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.js 模块映射为远程模块并预加载。完成映射后,再启动你的服务。之后,服务内的其他文件就可以像往常一样,在文件头部通过 require 静态导入并使用这个模块了。这是实现Node.js应用模块化动态加载的关键一步。

  • 映射并预加载
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(200, { 'Content-Type': 'text/plain' });
  res.end(`hello remote mod: ${hello()}`);
});

server.listen(3000, () => {
  console.log('Server running on port 3000');
});

发布远程模块

如果你想发布自己的模块供其他服务远程使用,可以遵循以下步骤初始化一个远程库项目:

hel init remote-lib-project
cd remote-lib-project
pnpm i

具体的模块开发、构建和发布到平台的完整流程,可以参考官方文档:https://tencent.github.io/hel/docs/tutorial/hel-mono/hel-mono-use

适用场景

当你的 Node.js 服务需要实现以下任意一项提效目标时,都可以考虑采用 hel-micro-node 来解决:

  • 减少镜像编译次数,节约平台磁盘空间:一次完整的 Docker 镜像编译通常会产生数 GB 的体积。而模块联邦方案只需将子模块(通常不到 1MB)的构建产物部署到 CDN。宿主服务无需重新编译代码和发布镜像,这能显著降低部署平台的镜像存储压力。
  • 提高模块分发效率,降低上线时间:由于模块可以动态下发到运行中的服务,无需服务重启。当一个公共模块被多个宿主服务使用时,只需部署该模块一次,所有依赖它的服务都能立即生效,实现了高效的“一次部署,全局更新”。
  • 更快的模块回滚速度,提高运维效率:当需要将模块回滚到某个历史版本时,仅需通过模块管控平台(如 helpack)或调用简单的 API 即可完成,能够实现秒级回滚,极大提升了运维响应速度。

hel-micro-node 为 Node.js 服务端带来了更灵活、高效的模块化管理方式,如果你正在探索前端框架/工程化领域的微前端或模块复用方案在服务端的落地实践,它提供了一个值得尝试的新思路。你可以在 云栈社区 找到更多关于模块化架构和工程化实践的讨论。

项目地址

👉 Github 仓库https://github.com/Tencent/hel/tree/main/packages/hel-micro-node




上一篇:Java日志框架选型指南:对比SLF4J、Logback、Log4j2与ELK、Loki场景
下一篇:AI Coding催化技术岗变革:前阿里P10毕玄谈“Agent工程师”新趋势
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-27 19:32 , Processed in 0.412803 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表