使用 pkg 打包 Node.js 项目打包构建 .EXE 桌面应用程序

本篇内容讲述如何使用 pkg 来打包由 Node.js 编写的项目(更侧重于Node.js纯脚本编写)如何打包构建桌面 .exe 桌面应用程序。

一、准备工作

1. 安装 Node.js 环境 ------ Node.js 环境安装 (详)

2. Node.js 项目 ------ 使用 Node.js 编写

3. VSCode ------ 编码工具

首先是确保已经安装了 Node.js 环境的,切出命令窗口使用如下命令来去确定,输入后回车有的话就会有对应的版本号输出,如果没有安装 Node.js 环境,上述已经提供关于 Node.js 环境安装的超链接供跳转,或者可以在 Node.js 专栏中翻阅。

复制代码
node -v

关于 Node.js 的内容在 Node.js 专栏中有就不再过多赘述,Node.js 主要用来写后端搭服务器,如 接口服务API,后台管理系统,数据库操作,文件服务,爬虫等等,那么下面我们就以接口服务API来去编写一个简单的项目内容用于演示。


二、Node.js 项目(简)

Node 专栏篇目: Express框架 安装 / Express 基本使用(简)

以上两篇内容就是创建一个简单的 Node.js 项目以及基础方法使用;

切出命令窗口,切到项目目录下,使用如下命令 index.js 文件:

javascript 复制代码
node index.js
javascript 复制代码
// index.js
const express = require('express');
const app = express();
 
app.get('/',function(req,res){
    res.send('WeCome TO Express');
})
 
app.listen('3000',function(){
    console.log('Server Running ...')
})

运行效果如下:

此时,我们可以到浏览器来去请求如下这个地址,发起一个请求,让 Node.js 服务端输入一条信息(WeCome TO Express);

现在我们这个 Node.js 项目的内容就是一个 API 接口服务的内容,处理前台发过来的请求,由 Node.js 后端来去处理完成后将数据返回给前台,并在窗口输入请求完成的反馈。


编写 Post 请求注册 API

在 index.js 中继续编写代码内容,post 请求,当我们请求 127.0.0.1:3000/regiister 的时候,后台就会将我们 post 请求所提交的信息来去取出来,然后添加到数据库,当数据添加到数据库成功就代表注册成功,返回给到前台,告诉用户注册成功了(这其中的一些具体代码就省略掉了,比如验证前台发过来的数据是否符合或者已经在前台测过不需要验证,连接数据库,把数据添加到数据库,操作数据库添加成功后表示注册成功等等这些)。

javascript 复制代码
// index.js
const express = require('express');
const app = express();

app.use(express.urlencoded({ extended: true }));

app.get('/', function (req, res) {
    res.send('WeCome TO Express');
})

// 注册
app.post('/register', function (req, res) {
    console.log("--------------------------------------------------------------------- 请求注册操作开始 ---------------------------------------------------------------------")
    console.log('注册信息:用户ID ' + req.body.userid + ",用户名称:" + req.body.username + ",用户密码:********");
    console.log('✅️ 注册信息已加入数据库,注册成功');
    console.log("--------------------------------------------------------------------- 请求注册操作结束 ---------------------------------------------------------------------")
    res.send("注册成功")
})

app.listen('3000', function () {
    console.log('Server Running ...')
})

这里我们不能用浏览器发请求,因为这是个Post请求,浏览器发的是Get请求,这里大家用Api 工具来去发请求就好了;

javascript 复制代码
http://127.0.0.1:3000/register

在这里模拟添加注册信息内容,然后点击发送请求,回到我们的Node.js:

可以看到的是以上在终端输出的信息,在这里反馈前台的一些操作或者打印一下日志之类的就可以了,直白一点就是只需要 CMD 这样的一个命令窗口就可以了。

那么我们就可以来去将这样的一个项目来去打包成桌面应用程序,打包后可供其他人使用,是否搭载 Node.js 都可以使用这个程序,因为已经将其打包在内了,下面我们就将这个项目来去打包成桌面应用程序。


三、安装 pkg

打开命令窗口,切到当前项目的根目录下,输入如下命令来去安装 pkg :

javascript 复制代码
npm install -g pkg

输入如下命令如果可以查看到版本号就表示安装成功,有网络问题下载不了可以换一下淘宝镜像再测试一下;

javascript 复制代码
pkg -v

四、打包

在命令窗口继续输入如下命令来去打包成 .exe 的桌面程序

javascript 复制代码
pkg index.js -t node16-win-x64

等待进度条完成100%即可


打包名称

打包名称默认打包完成时 index.exe ,如果需要修改可以重命名或者直接在打包的时候输入,打包的命令的后面添加打包后程序的名称,如下:

javascript 复制代码
pkg index.js -t node16-win-x64 -o 我的程序名称.exe

打包失败

如果你使用如下的这个打包命令失败的话,可以在测试后面两个打包命令,这个命令的兼容性要比后面两个要好的多,当然取决于你编写的 Node.js 。

javascript 复制代码
pkg index.js -t node16-win-x64

其他版本打包命令:

javascript 复制代码
pkg index.js -t node14-win-x64
javascript 复制代码
pkg index.js -t node18-win-x64

程序测试

完成之后在根目录下会生成一个 index.exe 的桌面应用程序

双击来去运行这个 index.exe ,它会自动运行 node index.js 文件;

我们重新来去 API 中发一个刚刚已经编写好的 POST 测试是否能够正常反馈打印;


五、补充

读取写入 TXT 文件

pkg 不会讲 TXT 文件一同打进 .exe 程序中,但是同样可以正常的来去读取,只需要我们把 node.js 中的路径不要写死如绝对路径,可以用相对路径,这个在 Node 专栏中当中已经有讲到过的 ( 五、path路径模块和url模块)。

修改 index.js 文件代码

javascript 复制代码
// index.js
const express = require('express');
const app = express();
const fs = require('fs');
const path = require('path');

app.use(express.urlencoded({ extended: true }));

// 写入路径
let WritePath = path.join(process.cwd(), 'Register.txt')

app.get('/', function (req, res) {
    res.send('WeCome TO Express');
})

// 注册
app.post('/register', function (req, res) {
    console.log("--------------------------------------------------------------------- 请求注册操作开始 ---------------------------------------------------------------------")
    console.log('注册信息:用户ID ' + req.body.userid + ",用户名称:" + req.body.username + ",用户密码:********");
    let WriteData = JSON.stringify(req.body)
    fs.writeFile(WritePath, WriteData, "utf-8", function (err) {
        if(err){ console.log(err) }
        console.log("数据写入成功!")
    })
    console.log("--------------------------------------------------------------------- 请求注册操作结束 ---------------------------------------------------------------------")
    res.send("注册成功")
})

app.listen('3000', function () {
    console.log('Server Running ...')
})

再次打包程序运行。


测试

可以在根目录下看到生成一个Register.txt文件,并将前台的注册信息写入到这个 TXT 文件当中去,Pkg 虽然没有将 TXT 文件内容进行打包,但是仍然可以读取,需要写对读取的路径以确保能够找到,尽可能使用英文路径编写避免读取或写入失败。

本篇内容到此就结束了,有自己制作的 Node.js 项目可以尝试来去打包成桌面应用程序体验一下,感谢观看,支持一下谢谢。

相关推荐
坤盾科技4 小时前
Docker 离线地图服务器搭建实战:Node.js + OpenLayers + MBTiles
linux·javascript·arcgis·docker·node.js
北暮城南4 小时前
使用 nvm 安装与管理多版本 Node.js(Windows)
windows·npm·node.js·nvm
fuquxiaoguang5 小时前
CVE-2026-41690深度解析:一个HTTP请求如何击穿Node.js中间件防线
http·中间件·node.js·cve-2026-41690
Hello--_--World5 小时前
Webpack:Webpack 核心配置、什么是 Loader? 什么是plugin?webpack 构建流程
前端·webpack·node.js
Beginner x_u6 小时前
MCP 实践 01|从 0 搭建 MCP Server:读取简历与 JD,并用 MCP Inspector 测试
ai·node.js·mcp
heyCHEEMS20 小时前
如何用 Recast 实现静态配置文件源码级读写
前端·node.js
Zender Han1 天前
PM2 介绍与使用教程:Node.js 项目的进程管理利器
node.js·编辑器·vim
ganshenml1 天前
【鸿蒙】 DevEco Studio + Node.js 多版本环境配置实战(n 管理器踩坑总结)
华为·node.js·harmonyos
Beginner x_u2 天前
前端八股整理(工程化 02)|CommonJS/ESM、Webpack Loader/Plugin 与Vite 对比
前端·webpack·node.js·plugin·loader