使用 NCC 和 PKG 将 Node.js 项目打包为跨平台可执行文件
很多时候我们需要将 Node.js 应用分发给没有安装运行环境的用户,或者希望部署更轻量。利用 ncc 进行代码编译,再配合 pkg 生成二进制文件,是解决这一问题的成熟方案。下面分享具体的实战流程。
准备工作
首先确保本地已安装 Node.js 环境。初始化一个基础项目:
mkdir my-node-app
cd my-node-app
npm init -y
接着安装业务依赖,这里以 Express 为例:
npm install express
创建入口文件 index.js:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
安装构建工具
我们需要两个核心工具:@vercel/ncc 用于编译打包模块,pkg 用于生成可执行文件。建议全局安装以便调用:
npm install -g @vercel/ncc
npm install -g pkg
编译与打包流程
1. 使用 NCC 编译
NCC 会将你的入口文件及其依赖项合并成一个单文件。这步能减少后续打包的体积,并处理 CommonJS/ESM 兼容性问题。
ncc build index.js -m -o dist
参数说明:
-m: 开启源码映射(可选,生产环境通常关闭)-o dist: 输出目录
2. 使用 PKG 打包
拿到编译后的文件后,用 pkg 将其封装成对应操作系统的二进制文件。注意,pkg 默认会检测当前系统架构,如果需要多平台支持,通常需要分别在 Linux、macOS 和 Windows 环境下各跑一次,或者配置交叉编译。
pkg dist/index.js --targets node18-linux-x64,node18-win-x64,node18-macos-x64


