什么是 pkg?
pkg
是一个命令行工具,能将 node.js 项目及其依赖打包成一个单独的可执行文件。用户无需安装 node.js 环境即可运行你的程序。支持的操作系统包括:
windows (生成
.exe
)macos (生成二进制文件)
linux (生成二进制文件)
安装 pkg
通过 npm 全局安装或作为项目依赖安装:
# 全局安装(推荐) npm install -g pkg # 或作为项目开发依赖安装 npm install pkg --save-dev
基本使用
步骤 1:准备你的 node.js 项目
假设你有一个简单的脚本 app.js
:
// app.js console.log("hello from pkg!");
步骤 2:通过命令行打包
在终端运行以下命令:
pkg app.js --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --output myapp
--targets
: 指定目标平台和 node.js 版本(例如node18-win-x64
表示 node.js 18 + windows 64位)。--output
: 输出文件名(会根据平台自动添加后缀,如.exe
)。
步骤 3:运行生成的可执行文件
生成的 myapp.exe
(windows)或 myapp
(macos/linux)可直接运行,无需 node.js 环境。
配置 package.json
更推荐在 package.json
中配置 pkg 参数:
{ "name": "myapp", "version": "1.0.0", "scripts": { "build": "pkg . --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --output myapp" }, "pkg": { "assets": ["public/**/*", "views/**/*"], // 包含静态资源 "scripts": ["scripts/*.js"] // 包含额外脚本 } }
运行 npm run build
即可打包。
处理资源文件
如果你的项目包含静态文件(如图片、html 模板),需注意:
相对路径问题:使用
__dirname
或path.resolve()
确保路径正确。在 pkg.assets 中声明资源:
{ "pkg": { "assets": "public/**/*" } }
高级用法
指定 node.js 版本和平台
支持的平台列表:
pkg -h # 查看所有支持的 target 组合
打包整个项目
直接打包 package.json
的入口文件:
pkg .
处理环境变量
在代码中通过 process.env.pkg
判断是否在打包环境中运行:
if (process.env.pkg) { console.log("running in packaged mode!"); }
常见问题
问题 1:动态导入模块失败
原因:
pkg
无法处理动态require()
(如require(path.join(__dirname, file))
)。解决:在
pkg.scripts
中预声明所有可能动态加载的文件。
问题 2:文件路径错误
原因:打包后文件系统路径变化。
解决:使用
path.dirname(process.execpath)
获取可执行文件所在目录。
问题 3:缺少依赖
原因:未在
dependencies
中声明依赖。解决:确保所有依赖在
package.json
的dependencies
中。
示例:打包 express 应用
项目结构:
my-express-app/ ├── app.js ├── public/ │ └── index.html └── package.json
app.js
代码:const express = require('express'); const path = require('path'); const app = express(); app.use(express.static(path.join(__dirname, 'public'))); app.listen(3000, () => { console.log('server running on port 3000'); });
package.json
配置:json
{ "pkg": { "assets": "public/**/*" } }
打包命令:
pkg app.js --targets node18-win-x64 --output my-express-app
总结
使用
pkg
可轻松将 node.js 项目转换为可执行文件。注意处理静态资源路径和动态模块加载。
通过
package.json
配置更便捷。
到此这篇关于将javascript打包成exe可执行文件的文章就介绍到这了,更多相关js打包成exe可执行文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论