Nodejs使用pkg打包为可执行文件

安装pkg

js 复制代码
npm install -g pkg

查看pkg命令

js 复制代码
pkg --help

修改package.json

新增bin入口配置

js 复制代码
{
  "name": "takescreenshot",
  "version": "1.0.0",
  "bin": "app.js",   // 新增bin入口配置
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.21.1",
  }
}

打包

默认打包

js 复制代码
pkg .

如果上面package.json没有配置bin的话,可以执行

js 复制代码
pkg .\app.js

指定打包的文件名

js 复制代码
pkg . --target win --output 你的文件名.exe

报错解决

js 复制代码
PS E:\TakeProject\takeScreenShot> pkg .        
> pkg@5.8.1
> Targets not specified. Assuming:
  node16-linux-x64, node16-macos-x64, node16-win-x64
> Fetching base Node.js binaries to PKG_CACHE_PATH
  fetched-v16.16.0-win-x64            [                    ] 0%> Not found in remote cache:
  {"tag":"v3.4","name":"node-v16.16.0-win-x64"}
> Building base binary from source:
  built-v16.16.0-win-x64
> Fetching Node.js source archive from nodejs.org...
> Error! AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:

  (0, assert_1.default)(!this.bar)

    at Log.enableProgress (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\log.js:64:30)
    at D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:58:31
    at step (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:33:23)
    at Object.next (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:14:53)
    at D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:4:12)
    at downloadUrl (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\utils.js:53:12)
    at D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\build.js:142:66
    at step (D:\ruanjian\node\nvm\v16.20.2\node_modules\pkg\node_modules\pkg-fetch\lib-es5\build.js:44:23)

进入网站: https://github.com/vercel/pkg-fetch/releases

找到我报错的tag的版本,点进这个版本的详情


找到报错的对象的name值里面的版本号信息

例如上面我的报错的版本是16.16.0,那就在网站上面找到这个版本


下载报错的name的名称对应文件

我报错的是{"tag":"v3.4","name":"node-v16.16.0-win-x64"}

则在这里找到node-v16.16.0-win-x64点击下载

下面的v3.4是上面报错的对象的tag属性的值

找到C:\Users\22560\.pkg-cache\v3.4文件夹

将上面下载的文件放到文件夹内,并重命名为fetched-v16.16.0-win-x64

同理:linuxmacos下载也是一样,复制到该文件夹内然后将前缀node改成fetched即可

然后重新pkg .即可

相关推荐
山沐与山9 小时前
【设计模式】Python策略模式:从入门到实战
python·设计模式·策略模式
多看书少吃饭3 天前
Electron 桌面应用打开录音功能导致页面蓝屏问题解决方案
javascript·electron·策略模式
大海星辰7984 天前
工厂模式与策略模式的深度实践:从代码优化到架构思考
java·架构·策略模式
天勤量化大唯粉4 天前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
syt_10134 天前
设计模式之-策略模式
设计模式·bash·策略模式
不爱吃糖的程序媛5 天前
解决鸿蒙PC命令行编译 macOS 上 cp 命令参数冲突问题
macos·harmonyos·策略模式
逐梦苍穹5 天前
ClamAV在macOS上的离线查杀与定时扫描实战(含clamd加速)
人工智能·安全·macos·策略模式·杀毒
yolo_guo6 天前
opencv 学习: 12 使用策略模式进行实现算法切换-以颜色搜索为例
opencv·策略模式
聪明努力的积极向上6 天前
【设计优化】卫语句、策略模式、状态模式
bash·状态模式·策略模式
koping_wu12 天前
【设计模式】设计模式原则、单例模式、工厂模式、模板模式、策略模式
单例模式·设计模式·策略模式