electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)

我的electron教程系列

electron教程(一): electron的安装和项目的创建

electron教程(二): http服务器, ws服务器, 子进程管理

electron教程(三): 使用ffi-napi引入C++的dll

electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)

?

引言

本篇将介绍如何将你开发的electron项目(main.js), 打包成一个可执行桌面程序(.exe).

有两个流行的工具可以做到这一点: electron-builderelectron-packager.

我不会详细地对比两者的优劣, 但会通过三个事实来帮助你选择合适的工具.

  1. electron-builder的Star为7.7k, electron-packager的Star为6.6k.
  2. 根据electron-builder的作者介绍, electron-builder打包后会比electron-packager更小, 还可以通过捐款来让作者优先帮你解决问题.
  3. electron-builder不支持node原生模块二进制模块, 所有这类型的模块在打包的过程中, 都会经历一次electron-rebuild, 被编译成electron模块. 这个机制引入了一些问题: 某些模块无法通过electron-rebuild编译, ffi-napi就是其中之一, 所以如果你的项目想要通过引入ffi-napi来使用C++的dll, 就只能选择electron-packager进行打包了.

?

electron-packager

?

1. 部署node.js+electron环境

electron教程(一): electron的安装和项目的创建

?

2. 安装electron-packager

执行指令:

yarn add electron-packager --save-dev

?

3. 在package.json中添加打包脚本

在package.json中的scripts中, 添加如下内容:

"packager": "electron-packager ./ testapp --win --out ./outputs"

如图所示:

你可以在electron-packager的github上查找该脚本支持的所有的参数.

?

4. 打包

执行指令:

npm run packager

如果顺利的话, 会出现打包成功的提示, 项目的根目录下出现outputs目录, 该目录下有testapp-win32-x64目录, 此目录下有若干文件, 包括testapp.exe可执行程序.

注:

  • outputs目录的名字是我们在packager脚本中指定的
  • testapp-win32-x64的名字是因为我们指定了生成win平台下的程序, 如果你指定生成linux和mac平台下, 就会出现针对该平台的目录.
  • testapp.exe同样是我们在packager脚本中指定的名字

?

4.1. 打包过程中会遇到的问题

第一次执行打包指令的时候, 会非常非常的慢, 甚至可能会失败, 通常的原因如下:

下载速度太慢

electron-packager在当前机器的首次打包的时候,会下载electron的预编译文件至当前用户目录,而electron-prebuilder的默认源在国外,在网络不好的情况下,即便有代理,速度也会非常慢。

可选的方案如下:

  • 使用代理
  • 更换阿里镜像源 (成功率不高)

在执行打包脚本前, 先执行指令, 指定从阿里的镜像源来下载electron预编译文件:

npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/
  • 使用cnpm (成功率较高, 但会引发别的问题, 如下)

用下面的指令替换npm run packager:

cnpm run packager
  • cnpm导致文件过大

如果你在项目构建过程中, 是通过cnpm来安装模块的, 会导致你项目中的node_muduoles体积非常大.

使用cnpm安装模块, 会导致所有的包都是扁平化的安装, node_modules中会有非常多的文件, 直接导致了electron-packager打包非常的慢.

而npm和yarn安装时, 所有的包都是树状解构的, 层级变深, 但是打包速度会快很多.

如果你已经使用cnpm安装过某些模块, 建议你删除这些模块, 以及这些模块的依赖, 重新使用npm和yarn安装.

一个技巧可以帮你快速完成上述步骤:

将项目根目录的node_modules彻底删除, 然后执行指令:

yarn install

该指令会读取项目目录下package.json中的devDependenciesdependencies中的内容(也就是你之前安装过的全部模块), 一次性重新安装.

注:

某些模块无法通过yarn安装, 比如ffi-napi, 如果你希望删除node_modules后利用package.json重新安装, 按照如下步骤即可:

  1. 删除无法yarn的模块: 在package.json中, 将ffi-napi的内容删除.
  2. yarn安装其他模块: 通过yarn install先安装其他模块.
  3. 手动安装该模块: 执行npm i ffi-napi重新安装ffi-napi.

?

electron-builder

?

注:

因为我自己的项目中, 使用了ffi-napi. 所以我只能选择electron-packager作为打包工具.

在这里electron-builder只是简单的介绍了使用流程, 如果你在使用中遇到了什么问题, 可以参考electron-packager中的解决方案, 或者留言告诉我.

?

1. 部署node.js+electron环境

electron教程(一): electron的安装和项目的创建

?

2. 安装electron-builder

执行指令:

yarn add electron-builder --save-dev

?

3. 在package.json中添加打包脚本

在package.json中, 添加如下内容:

  "build": {
    "appId": " your.id ",
    "mac": {
        "category": " your.app.category.type "
    }
  },

在scripts中, 添加如下内容:

    "pack": " electron-builder --dir ",
    "dist": " electron-builder --win --x64",
    "postinstall": "electron-builder install-app-deps"

如下图所示:

?

4. 打包

执行命令, 编译:

yarn postinstall

再执行命令, 打包:

yarn dist

原文地址:https://www.cnblogs.com/silenzio/p/11639960.html

时间: 2024-08-06 11:41:13

electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)的相关文章

electron教程(三): 使用ffi-napi引入C++的dll

我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使用ffi-napi引入C++的dll ? 引言 ? 这一篇将介绍如何在node.js+electron环境中, 使用node-ffi/ffi-napi调用C/C++编写的动态链接库(即dll), 实现调用C/C++代码. 本教程适用于electron 4.x-6.x版本. 如electron 4.2

ELECTRON 学习四

接上篇,优化 第一步:去掉菜单栏 mainWindow = new BrowserWindow({ title: 'hello Electron', width: 800, height: 500, frame: false, }); 第二步:改为透明窗口 mainWindow = new BrowserWindow({ title: 'hello Electron', width: 800, height: 500, frame: false, transparent: true }); 参考

Electron – 基础学习(2): 项目打包成exe桌面应用

项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建.通过electron社群提供的命令行工具(CLI)  electron-forge 创建项目,看起来对应的项目打包方式也应该有三种才对,但其实细看第一种方式和第三种项目创建方式是一样的,所以它们的项目打包方式也是一样的. 打包 electron 项目webpack工具有 electron-packager 和 electron-buil

Electron+Vue – 基础学习(2): 项目打包成exe桌面应用

项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工具(CLI)  electron-forge 创建项目,看起来对应的项目打包方式也应该有三种才对,但其实细看第一种方式和第三种项目创建方式是一样的,所以它们的项目打包方式也是一样的. 打包 electron 项目webpack工具有 electron-packager 和 electron-buil

RabbitMQ入门教程(四):工作队列(Work Queues)

原文:RabbitMQ入门教程(四):工作队列(Work Queues) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78596426 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 工作队列 使用工作队列实现任务分发的功能,一个队列的优点就是很容易处理并行化的工作能力,但是如果我们积累了大量的工作,我们

史上最详细的Android Studio系列教程四--Gradle基础

史上最详细的Android Studio系列教程四--Gradle基础

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

Junit 4 Tutorials(Junit 4 教程) 四、Junit4 参数化测试

Junit 4 参数化测试 允许通过变化范围的参数值来测试方法.参数擦测试可以通过以下简单的步骤实现: 对测试类添加注解 @RunWith(Parameterized.class) 将需要使用变化范围参数值测试的参数定义为私有变量 使用上一步骤声明的私有变量作为入参,创建构造函数 .创建一个使用@Parameters注解的公共静态方法,它将需要测试的各种变量值通过集合的形式返回. 使用定义的私有变量定义测试方法 Junit 4 参数化测试样例 EvenNumberChecker.java 校验输

Swift中文教程(四)--函数与闭包

原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: 1 func greet(name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet("Bob", "Tuesday")