V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
songray
V2EX  ›  Node.js

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

  •  3
     
  •   songray · 11 天前 · 2200 次点击

    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 条回复    2025-04-14 16:55:00 +08:00
    byte10
        1
    byte10  
       11 天前
    我之前好像用过 npx ,后面好像是兼容还是啥的,选择 pkg
    songray
        2
    songray  
    OP
       11 天前 via iPhone
    @byte10 你说的应该 nexe 和 pkg 吧,这俩也是打包可执行文件的工具,npx 是执行远程脚本用的。

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

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

    虽然都说 rust 好, 但毕竟没多少人玩得转
    zhwithsweet
        9
    zhwithsweet  
       11 天前
    nice !等 fs 支持好了,我来试用下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2706 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:09 · PVG 22:09 · LAX 07:09 · JFK 10:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.