songray
V2EX  ›  Node.js

把 node.js 程序打包成可执行文件,不过只有 10M

  •  3
     
  •   songray · Apr 14, 2025 · 5181 views
    This topic created in 570 days ago, the information mentioned may be changed or developed.

    https://github.com/Ray-D-Song/lexe

    也可以使用 npx lexe build -i=index.js 快速体验一下

    rt ,周末写的小玩具,魔改了 AWS 的 JavaScript 运行时 llrt 。
    llrt 提供了大多数关键的 Node.js API ,但因为没有 JIT ,所以这个工具适合轻量级服务和 cli 工具。

    实现上参考了 deno compile 和 bun compile ,目前一个 hello-world 打包出来是 10M ,虽然还可以更小一些,但相较于 deno 和 bun 的 50~60M 已经算可以了。

    9 replies  •  2025-04-14 16:55:00 +08:00
    byte10
    byte10
    Apr 14, 2025
    1
    我之前好像用过 npx ,后面好像是兼容还是啥的,选择 pkg
    songray
    songray
    OP
    Apr 14, 2025 via iPhone
    2
    @byte10 你说的应该 nexe 和 pkg 吧,这俩也是打包可执行文件的工具,npx 是执行远程脚本用的。

    其实原理都是把代码嵌入到 js 运行时里面,运行的时候再提取代码,不过因为 js 有 cjs 和 esm 两种格式,所以确实有可能兼容性问题。
    pursuer
    pursuer
    Apr 14, 2025
    3
    txiki.js 应该可以更小一点,我也想在 txiki.js 上实现 node 兼容的,但不太顺利,网上找到的 polyfill 大部分都是针对浏览器环境,对 node 服务器侧的支持很弱
    lisxour
    lisxour
    Apr 14, 2025
    4
    兼容性怎样,我意思是一整个完整的项目,不是简单的纯单体 js ,包括.node 加载,cjs/esm 兼容,各式各样的东西
    songray
    songray
    OP
    Apr 14, 2025
    5
    @lisxour
    和 pkg 以及 nexe 一样,需要自己使用 esbuild 、ncc 之类的工具把项目转换成单个的 js 文件,所以兼容性是那些工具保证的。
    BugCry
    BugCry
    Apr 14, 2025
    6
    在用 bun ,有空体验下 op 的这个
    chairuosen
    chairuosen
    Apr 14, 2025
    7
    没有 JIT 是不是就不能用 eval ?
    iorilu
    iorilu
    Apr 14, 2025
    8
    不错

    现在 nodejs, python 这些急需一种好的小体积打包方式

    虽然都说 rust 好, 但毕竟没多少人玩得转
    zhwithsweet
    zhwithsweet
    Apr 14, 2025
    9
    nice !等 fs 支持好了,我来试用下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1549 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    ♥ Do have faith in what you're doing.