
本篇内容讲述如何使用 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 项目可以尝试来去打包成桌面应用程序体验一下,感谢观看,支持一下谢谢。
