Nodejs使用pkg打包为可执行文件的解决方案

 更新时间:2024年11月01日 11:18:43   作者:萧寂173  
使用pkg将Node.js项目打包为可执行文件时,可能会遇到一些常见的错误,如未指定目标平台、在远程缓存中找不到基础Node.js二进制文件等,本文介绍了如何通过配置package.json中的bin入口、手动下载指定版本的Node.js二进制文件到本地.pkg-cache目录解决这些问题

安装pkg

npm install -g pkg

查看pkg命令

pkg --help

修改package.json

新增bin入口配置

{
  "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",
  }
}

打包

默认打包

pkg .

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

pkg .\app.js

指定打包的文件名

pkg . --target win --output 你的文件名.exe

报错解决

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 .即可

到此这篇关于Nodejs使用pkg打包为可执行文件的文章就介绍到这了,更多相关nodejs使用pkg打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Centos7 中安装 Node.js v4.4.4

    Centos7 中安装 Node.js v4.4.4

    我一直对学习Node.js比较感兴趣。这是一个Java平台的服务器端编程 ,它允许开发人员在服务器编写Java代码,并且有许多CentOS的用户正努力学习这个语言的开发环境。这正是我想做这个教程的目的。
    2016-11-11
  • 详解NODEJS基于FFMPEG视频推流测试

    详解NODEJS基于FFMPEG视频推流测试

    本篇文章主要介绍了详解NODEJS基于FFMPEG视频推流测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Mongoose经常返回e11000 error的原因分析

    Mongoose经常返回e11000 error的原因分析

    这篇文章主要给大家分析了Mongoose经常返回e11000 error的原因,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友可以们下面来一起看看吧。
    2017-03-03
  • Electron调用外接摄像头并拍照上传实现详解

    Electron调用外接摄像头并拍照上传实现详解

    这篇文章主要为大家介绍了Electron调用外接摄像头并拍照上传实例实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • nodejs入门教程四:URL相关模块用法分析

    nodejs入门教程四:URL相关模块用法分析

    这篇文章主要介绍了nodejs入门教程四之URL相关模块用法,较为详细的分析了URL相关模块功能、方法与使用技巧,需要的朋友可以参考下
    2017-04-04
  • Nodejs 和 Electron ubuntu下快速安装过程

    Nodejs 和 Electron ubuntu下快速安装过程

    本文较为详细的给大家介绍了Nodejs 和 Electron ubuntu下快速安装过程,非常不错,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • Node文件操作汇总实例详解

    Node文件操作汇总实例详解

    这篇文章主要为大家介绍了Node文件操作汇总实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 一文详解NPM如何换源

    一文详解NPM如何换源

    在每一次的实际开发过程中我们都会下载相关的依赖包,最官方的是 npm,但是该服务器对于国内开发者来说,下载起来是比较慢的,所以我们需要换源,下面这篇文章主要给大家介绍了关于NPM如何换源的相关资料,需要的朋友可以参考下
    2023-02-02
  • iOS + node.js使用Socket.IO框架进行实时通信示例

    iOS + node.js使用Socket.IO框架进行实时通信示例

    本篇文章主要介绍了iOS + node.js使用Socket.IO框架进行实时通信示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • Node.js console控制台简单用法分析

    Node.js console控制台简单用法分析

    这篇文章主要介绍了Node.js console控制台简单用法,结合实例形式分析了nodejs console控制台功能、常见函数与简单使用技巧,需要的朋友可以参考下
    2019-01-01

最新评论