node 新手咨询 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
afeiche
V2EX    Node.js

node 新手咨询

  •  
  •   afeiche 2022-05-26 15:11:47 +08:00 4219 次点击
    这是一个创建于 1309 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚刚使用 node ,项目有 c++的 addon ,这种一般是怎么发布到生产环境?是不是起一个本地的虚拟机,对应生产环境的操作系统,然后 npm install 之后,拷贝上去?

    9 条回复    2022-05-26 18:44:32 +08:00
    lmshl
        1
    lmshl  
       2022-05-26 15:40:53 +08:00
    docker 多阶段构建
    一阶段构建环境,装 node gcc 等 devel ,编译出 addon 来。如果有 webpack / vite 任务也应当在这个阶段执行。
    二阶段运行环境,把一阶段生成的文件拷贝进来,作为最终镜像

    最后去生产环境 pull 下来 docker run
    lmshl
        2
    lmshl  
       2022-05-26 15:42:59 +08:00
    如果生产环境 arch / os 和你本地不一样,甚至 node / v8 版本不一样,最后生成的 addon 都是不兼容的,搞交叉编译不如 docker 发布。
    lmshl
        3
    lmshl  
       2022-05-26 15:44:26 +08:00
    当然如果你 C++ 代码没有涉及系统调用,就是纯计算的话,还可以迁移到 WASM 实现上去,就不用操心 arch / os 兼容问题了。
    libook
        4
    libook  
       2022-05-26 16:01:29 +08:00
    题主的方案是可以的,我们以前用过这种方案,前提是编译环境和生产环境的硬件架构、系统、依赖包、Node 版本等都一致,或者很明确是兼容的。

    当然现在来说,容器可以解决除硬件环境以外的其他所有问题,更方便一些。
    hronro
        5
    hronro  
    &bsp;  2022-05-26 16:10:11 +08:00
    @lmshl #3 纯计算的话,WASM 可比 native 慢多了,就为了图那么一点部署方便,完全是本末倒置
    slowgen
        6
    slowgen  
       2022-05-26 16:28:39 +08:00   1
    docker 多阶段构建,配合 https://github.com/vercel/pkg 打包成单文件二进制,减少 node_modules 庞大的碎片文件对 IO 影响
    afeiche
        7
    afeiche  
    OP
       2022-05-26 16:46:22 +08:00
    @libook 主要是里面的那个开源库我看是需要下载一些类似 openssl 的库,不知道会不会依赖包
    afeiche
        8
    afeiche  
    OP
       2022-05-26 16:46:50 +08:00
    看起来 docker 可能是比较简单的处理方案,毕竟需要涉及本地依赖库
    libook
        9
    libook  
       2022-05-26 18:44:32 +08:00
    @afeiche #7 编译 addon 的时候可能会依赖一些 C/C++的库,这些库可以用操作系统的包管理器安装,也可以手动安装到正确的位置,甚至自己编译。

    正常情况下,module 的编译问题,其开发者应该都会妥善解决,你执行 npm install 的时候至多会出现库不存在需要自己在系统环境中安装,这个去 Google 一下应该也不难。

    但毕竟这块耦合了 C/C++技术栈,说不准会出现一些开发者没有妥善解决的问题,而这些问题通常 Node 应用开发者又解决不了。

    如果不得不用 Addon 的话,建议尽量使用知名的、成熟的,有问题也可以去翻翻 Issue 或自己提一个 Issue 。

    @hronro #5 WASM 、C/C++ Addons 、N-API 在不同场景下表现的性能也不大一样,不同的编译器、不同的 Node 版本也都会有差异,生产上也需要参考特定场景下的压测数据才能做决策。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2760 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:55 PVG 22:55 LAX 06:55 JFK 09:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86