137人参与 • 2025-04-24 • Javascript
pkg 是一个命令行工具,能将 node.js 项目及其依赖打包成一个单独的可执行文件。用户无需安装 node.js 环境即可运行你的程序。支持的操作系统包括:
windows (生成 .exe)
macos (生成二进制文件)
linux (生成二进制文件)
通过 npm 全局安装或作为项目依赖安装:
# 全局安装(推荐) npm install -g pkg # 或作为项目开发依赖安装 npm install pkg --save-dev
假设你有一个简单的脚本 app.js:
// app.js
console.log("hello from pkg!");在终端运行以下命令:
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)。
生成的 myapp.exe(windows)或 myapp(macos/linux)可直接运行,无需 node.js 环境。
更推荐在 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/**/*"
}
}支持的平台列表:
pkg -h # 查看所有支持的 target 组合
直接打包 package.json 的入口文件:
pkg .
在代码中通过 process.env.pkg 判断是否在打包环境中运行:
if (process.env.pkg) {
console.log("running in packaged mode!");
}原因:pkg 无法处理动态 require()(如 require(path.join(__dirname, file)))。
解决:在 pkg.scripts 中预声明所有可能动态加载的文件。
原因:打包后文件系统路径变化。
解决:使用 path.dirname(process.execpath) 获取可执行文件所在目录。
原因:未在 dependencies 中声明依赖。
解决:确保所有依赖在 package.json 的 dependencies 中。
项目结构:
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可执行文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论