找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 155|回复: 0

node 新手咨询

[复制链接]

1091

主题

0

回帖

3307

积分

管理员

积分
3307
发表于 2023-12-3 13:56:44 | 显示全部楼层 |阅读模式
刚刚使用 node ,项目有 c++的 addon ,这种一般是怎么发布到生产环境?是不是起一个本地的虚拟机,对应生产环境的操作系统,然后 npm install 之后,拷贝上去?

docker 多阶段构建一阶段构建环境,装 node gcc 等 devel ,编译出 addon 来。如果有 webpack / vite 任务也应当在这个阶段执行。二阶段运行环境,把一阶段生成的文件拷贝进来,作为最终镜像最后去生产环境 pull 下来 docker run
如果生产环境 arch / os 和你本地不一样,甚至 node / v8 版本不一样,最后生成的 addon 都是不兼容的,搞交叉编译不如 docker 发布。
当然如果你 C++ 代码没有涉及系统调用,就是纯计算的话,还可以迁移到 WASM 实现上去,就不用操心 arch / os 兼容问题了。
题主的方案是可以的,我们以前用过这种方案,前提是编译环境和生产环境的硬件架构、系统、依赖包、Node 版本等都一致,或者很明确是兼容的。当然现在来说,容器可以解决除硬件环境以外的其他所有问题,更方便一些。
@lmshl #3 纯计算的话,WASM 可比 native 慢多了,就为了图那么一点部署方便,完全是本末倒置
docker 多阶段构建,配合 https://github.com/vercel/pkg 打包成单文件二进制,减少 node_modules 庞大的碎片文件对 IO 影响
@libook 主要是里面的那个开源库我看是需要下载一些类似 openssl 的库,不知道会不会依赖包
看起来 docker 可能是比较简单的处理方案,毕竟需要涉及本地依赖库
@afeiche #7 编译 addon 的时候可能会依赖一些 C/C++的库,这些库可以用操作系统的包管理器安装,也可以手动安装到正确的位置,甚至自己编译。正常情况下,module 的编译问题,其开发者应该都会妥善解决,你执行 npm install 的时候至多会出现库不存在需要自己在系统环境中安装,这个去 Google 一下应该也不难。但毕竟这块耦合了 C/C++技术栈,说不准会出现一些开发者没有妥善解决的问题,而这些问题通常 Node 应用开发者又解决不了。如果不得不用 Addon 的话,建议尽量使用知名的、成熟的,有问题也可以去翻翻 Issue 或自己提一个 Issue 。@hronro #5 WASM 、C/C++ Addons 、N-API 在不同场景下表现的性能也不大一样,不同的编译器、不同的 Node 版本也都会有差异,生产上也需要参考特定场景下的压测数据才能做决策。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|张迁碑

GMT+8, 2024-10-31 19:19 , Processed in 0.126300 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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