如何将ES6格式的Node.js项目打包为可执行文件(.exe)?
解决ES6 Node.js代码打包为Windows .exe的方案
方法1:先转译ES6为CommonJS再打包
这是最稳妥的方案,先将ES6代码(使用import/export)转成Node.js原生支持的CommonJS格式(require/module.exports),再用nexe或pkg打包。
用esbuild快速转译(推荐)
esbuild是极快的JS转译工具,无需复杂配置:
- 安装esbuild:
npm install esbuild --save-dev - 执行转译命令(假设入口文件为
src/index.js):
参数说明:npx esbuild src/index.js --bundle --platform=node --format=cjs --outfile=dist/index.js--bundle:打包所有依赖到单个文件--platform=node:针对Node.js环境打包--format=cjs:输出CommonJS格式
- 用pkg打包转译后的文件:
npx pkg dist/index.js --targets node18-win-x64 --output myapp.exe
用Babel转译(适合复杂代码场景)
如果代码用到较多ES6+特性,esbuild处理有问题时可选用Babel:
- 安装依赖:
npm install @babel/core @babel/cli @babel/preset-env --save-dev - 在项目根目录创建
babel.config.json:{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }] ] } - 转译代码:
npx babel src --out-dir dist - 用nexe或pkg打包dist目录下的入口文件即可。
方法2:使用支持ES模块的打包工具
部分工具已原生支持ES模块,无需提前转译:
更新pkg到最新版本
pkg从v5.x开始支持ES模块,确保使用最新版:
- 更新pkg:
npm install pkg@latest --save-dev - 在
package.json中添加"type": "module"(声明项目使用ES模块):{ "type": "module", "main": "src/index.js", "scripts": { "pkg": "pkg . --targets node18-win-x64 --output myapp.exe" } } - 执行打包命令:
npm run pkg
使用ncc打包后转exe
ncc是webpack官方的Node.js代码打包工具,支持ES模块,打包后生成单个可执行的CommonJS文件:
- 安装ncc:
npm install @vercel/ncc --save-dev - 打包代码:
npx ncc build src/index.js -o dist - 用pkg打包dist目录下的
index.js即可得到exe文件。
方法3:使用Electron(适合GUI应用)
如果项目是GUI应用,Electron可直接打包ES6代码为Windows exe,无需额外转译:
- 安装Electron和打包工具:
npm install electron electron-builder --save-dev - 配置
package.json(示例):{ "type": "module", "main": "src/main.js", "scripts": { "build": "electron-builder --win" }, "build": { "appId": "com.yourcompany.myapp", "win": { "target": "nsis" } } } - 执行打包命令:
打包后的exe会生成在npm run builddist目录中。
内容的提问来源于stack exchange,提问作者Darkness
相关产品推荐
相关产品推荐

