NodeJS 通过 pkg 打包发布可行吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyooo
V2EX    Node.js

NodeJS 通过 pkg 打包发布可行吗?

  •  
  •   fyooo 2022-09-05 19:29:36 +08:00 5502 次点击
    这是一个创建于 1206 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人刚学 NodeJS 不久,原来写 Java 的时候都是打包成 jar 发布的。

    写 NodeJS 的时候,看到的建议是发布代码到服务器后再 npm install ,比如 https://blog.csdn.net/shenxianhui1995/article/details/113546917

    发现十年前有人问过这个问题了: https://cnodejs.org/topic/4fffea1b4764b7290275b39a

    近年有人提出用 pkg ,比如:

    https://juejin.cn/post/6982133816001462285

    https://zhuanlan.zhihu.com/p/113204537

    有点好奇,业界一般是怎么做这个事情的?

    9 条回复    2022-09-06 21:56:02 +08:00
    DiamondYuan
        1
    DiamondYuan  
       2022-09-05 19:38:54 +08:00 via iPhone   1
    如果你想在服务器上运行,推荐使用 docker

    如果你想把 nodejs 发给别人,可以试试看 pkg
    lisongeee
        2
    lisongeee  
       2022-09-05 19:51:18 +08:00
    >原来写 Java 的时候都是打包成 jar 发布的。
    你发布的是 java 应用还是 java 库?你说的打包是指把 java 代码编译成 class 字节码然后合并到一个 jar 文件里吗
    node 是解释运行,不需要这种类似 java 的打包
    liKeYunKeji
        3
    liKeYunKeji  
       2022-09-05 19:58:30 +08:00 via iPhone
    node 写好之后,直接发布到到 npm 就行了,别人通过 npm 命令下载你的包。
    zhuweiyou
        4
    zhuweiyou  
       2022-09-05 20:05:02 +08:00   1
    pkg 是连环境一起打包的, 用于在没有环境的机器跑, 比如说发给别人用.

    如果你是在服务器上跑, 直接源码部署 npm install 就行了. 或者弄 docker 里.
    humbass
        5
    humbass  
       2022-09-05 22:00:27 +08:00   1
    Nodejs 这块是一个痛点,一直没有特别好的方案。PKG 也不是万能、傻瓜模式;
    star7th
        6
    star7th  
       2022-09-05 22:48:43 +08:00   1
    如果是自用的产品,请发布代码到服务器后再 npm install 。
    如果是要分发给别人(比如开源软件什么的),才比较适合使用 pkg 。我两者方式都用得很熟,我的建议如上。
    libook
        7
    libook  
       2022-09-06 10:23:13 +08:00   1
    肯定可以,但我个人很少见到这么干的。

    过去一般就是把项目 git clone 或 scp 或 rsync 到服务器的目录上,只要服务器上装了 node ,就可以 npm ci 然后再运行。
    现在一般都是容器化 /云原生了,直接打成 docker 镜像,然后 push 和 pull 。

    桌面软件比如 Electron 的一般都是有专门的打包工具,可以吧项目代码、依赖和 node 运行环境打包在一起然后分发。
    slowgen
        8
    slowgen  
       2022-09-06 19:09:22 +08:00   1
    可行啊,我这样做一年多了,打包成单文件丢 alpine/slim 容器,体积小了很多。
    比如拿个简单的 NestJS 的程序打包出来也就四十多 MB 吧,丢到 alpine 也就加 5MB 。
    好处是在 serverless 环境里避免了 node_modules 大量碎片文件拖慢解压速度,以达到提升冷启动速度的目的。
    唯一的缺点是接入 sentry 这种异常监控告警,定位到的代码不那么准。Deno 接下来重点也在兼容 Node.js ,到时又会多一个打包成可执行文件的方案。
    zsj1029
        9
    zsj1029  
       2022-09-06 21:56:02 +08:00 via iPhone
    可以尝试 dart 重构,近似的语法,一样的单线程异步事件循环,最最重要的像 go 一样的跨平台编译可执行单文件,完美解决痛点,内存占用低媲美 golang ,多了很多实用的迭代器方法,一样的 stream 流控制,再也不为 npm 烦恼了,缺点轮子少
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4276 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 04:07 PVG 12:07 LAX 20:07 JFK 23:07
    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