本人刚学 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
有点好奇,业界一般是怎么做这个事情的?
1
DiamondYuan 2022-09-05 19:38:54 +08:00 via iPhone 1
如果你想在服务器上运行,推荐使用 docker
如果你想把 nodejs 发给别人,可以试试看 pkg |
2
lisongeee 2022-09-05 19:51:18 +08:00
>原来写 Java 的时候都是打包成 jar 发布的。
你发布的是 java 应用还是 java 库?你说的打包是指把 java 代码编译成 class 字节码然后合并到一个 jar 文件里吗 node 是解释运行,不需要这种类似 java 的打包 |
3
pytth 2022-09-05 19:58:30 +08:00 via iPhone
node 写好之后,直接发布到到 npm 就行了,别人通过 npm 命令下载你的包。
|
4
zhuweiyou 2022-09-05 20:05:02 +08:00 1
pkg 是连环境一起打包的, 用于在没有环境的机器跑, 比如说发给别人用.
如果你是在服务器上跑, 直接源码部署 npm install 就行了. 或者弄 docker 里. |
5
humbass 2022-09-05 22:00:27 +08:00 1
Nodejs 这块是一个痛点,一直没有特别好的方案。PKG 也不是万能、傻瓜模式;
|
6
star7th 2022-09-05 22:48:43 +08:00 1
如果是自用的产品,请发布代码到服务器后再 npm install 。
如果是要分发给别人(比如开源软件什么的),才比较适合使用 pkg 。我两者方式都用得很熟,我的建议如上。 |
7
libook 2022-09-06 10:23:13 +08:00 1
肯定可以,但我个人很少见到这么干的。
过去一般就是把项目 git clone 或 scp 或 rsync 到服务器的目录上,只要服务器上装了 node ,就可以 npm ci 然后再运行。 现在一般都是容器化 /云原生了,直接打成 docker 镜像,然后 push 和 pull 。 桌面软件比如 Electron 的一般都是有专门的打包工具,可以吧项目代码、依赖和 node 运行环境打包在一起然后分发。 |
8
shuimugan 2022-09-06 19:09:22 +08:00 1
可行啊,我这样做一年多了,打包成单文件丢 alpine/slim 容器,体积小了很多。
比如拿个简单的 NestJS 的程序打包出来也就四十多 MB 吧,丢到 alpine 也就加 5MB 。 好处是在 serverless 环境里避免了 node_modules 大量碎片文件拖慢解压速度,以达到提升冷启动速度的目的。 唯一的缺点是接入 sentry 这种异常监控告警,定位到的代码不那么准。Deno 接下来重点也在兼容 Node.js ,到时又会多一个打包成可执行文件的方案。 |
9
zsj1029 2022-09-06 21:56:02 +08:00 via iPhone
可以尝试 dart 重构,近似的语法,一样的单线程异步事件循环,最最重要的像 go 一样的跨平台编译可执行单文件,完美解决痛点,内存占用低媲美 golang ,多了很多实用的迭代器方法,一样的 stream 流控制,再也不为 npm 烦恼了,缺点轮子少
|