You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不借助pkg等外部包用Node.js编译自定义可执行文件

不依赖pkg等外部包生成Node.js可执行文件的实现方案

以下几种方法无需使用pkg、nexe这类第三方打包库,基于Node.js原生功能或系统工具实现:

方法1:利用Node.js 18+内置快照功能

Node.js 18及以后版本提供了内置快照生成能力,可将脚本预编译为快照,与Node.js二进制文件拼接成可执行文件。

步骤:

  1. 编写目标Node.js脚本,示例app.js:
    console.log("Hello, custom executable!");
    process.exit(0);
    
  2. 生成快照文件:
    node --snapshot app.js snapshot.blob
    
  3. 拼接Node二进制与快照:
    • Linux/macOS:
      cat $(which node) snapshot.blob > myapp && chmod +x myapp
      
      直接运行./myapp即可执行脚本。
    • Windows:
      copy /b "%ProgramFiles%\nodejs\node.exe"+snapshot.blob myapp.exe
      
      双击myapp.exe或在命令行运行即可。

注意:快照功能存在限制,无法支持动态加载模块、某些process API的特殊用法,具体可参考Node.js官方的快照文档。

方法2:通过C++封装Node.js运行时

若熟悉C++,可基于Node.js的C++ API直接嵌入脚本,编译为独立可执行文件。

步骤:

  1. 安装Node.js开发依赖(如Linux下的nodejs-dev包,或直接下载Node.js源码)。
  2. 编写C++代码main.cpp:
    #include <node.h>
    
    int main(int argc, char* argv[]) {
      // 初始化Node.js环境
      node::InitializeOncePerProcess(argc, argv);
      // 嵌入要执行的Node.js脚本
      const char* script = R"(
        console.log("Hello from embedded Node.js script!");
        process.exit(0);
      )";
      // 创建并加载环境,运行脚本
      auto env = node::CreateEnvironment(node::GetCurrentPlatform(), nullptr, argc, argv);
      node::LoadEnvironment(env, script);
      // 启动Node.js事件循环
      return node::Run(node::GetCurrentPlatform());
    }
    
  3. 配置binding.gyp:
    {
      "targets": [
        {
          "target_name": "myapp",
          "sources": ["main.cpp"],
          "include_dirs": ["<!(node -p \"require('node-addon-api').include\")"],
          "dependencies": ["<!(node -p \"require('node-addon-api').gyp\")"]
        }
      ]
    }
    
  4. 编译生成可执行文件:
    npm install node-addon-api
    node-gyp configure build
    
    编译完成后,build/Release目录下会生成myapp(Linux/macOS)或myapp.exe(Windows)。

方法3:系统原生打包工具封装

无需编译,仅将Node.js二进制与脚本打包为可执行文件:

Linux/macOS(使用shc)

  1. 编写启动脚本start.sh:
    #!/bin/sh
    # 提取当前可执行文件所在目录
    EXEC_DIR=$(dirname "$(realpath "$0")")
    # 运行Node.js脚本
    exec "$EXEC_DIR/node" "$EXEC_DIR/app.js" "$@"
    
  2. 用shc(Shell脚本编译工具,部分系统需自行安装)打包:
    shc -f start.sh -o myapp
    
  3. 将Node.js二进制文件、app.js与myapp放在同一目录,运行./myapp即可。

Windows(使用系统自带iexpress)

  1. 创建包含node.exe、app.js的文件夹。
  2. 打开iexpress(命令行输入iexpress启动),按照向导创建自解压包,设置解压后自动执行node.exe app.js。
  3. 生成的exe文件即为可执行包,运行时会自动解压并执行脚本。

内容的提问来源于stack exchange,提问作者user20188099

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:25:22