electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)
我的electron教程系列
electron教程(一): electron的安装和项目的创建
electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint
electron教程(二): http服务器, ws服务器, 子进程管理
electron教程(三): 使用ffi-napi引入C++的dll
electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)
引言
本篇将介绍如何将你开发的electron项目(main.js), 打包成一个可执行桌面程序(.exe).
有两个流行的工具可以做到这一点: electron-builder
和 electron-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中添加打包脚本
//FIXME todo:因为我优化了项目目录, 把main.js和其他js移动到了src文件夹中, index.html及lib移动到了html中, 所以脚本中的目录可能需要一些修改
在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
中的devDependencies
和dependencies
中的内容(也就是你之前安装过的全部模块), 一次性重新安装.
注:
某些模块无法通过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
electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)的更多相关文章
- electron教程(三): 使用ffi-napi引入C++的dll
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...
- electron教程(一): electron的安装和项目的创建
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...
- electron教程(二): http服务器, ws服务器, 进程管理
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...
- electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- Electron开发跨平台桌面程序入门教程
最近一直在学习 Electron 开发桌面应用程序,在尝试了 java swing 和 FXjava 后,感叹还是 Electron 开发桌面应用上手最快.我会在这一篇文章中实现一个HelloWord ...
- 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word
现在基于 js 和 web浏览器核心构建的 C/S 程序越来越多,比如微信桌面版(基于 duilib 和 cef).VS CODE(基于electron)等,出于了解的目的,最近学习了 electro ...
- 【Electron】Electron开发入门(五):项目打包
一.安装 electron-packager PS:安装之前,先复制一份package.json文件到./app目录下,然后改下./app目录下package.json里 "main&quo ...
- Electron+Vue – 基础学习(2): 项目打包成exe桌面应用
项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...
随机推荐
- 2018宁夏邀请赛K题Vertex Covers(高维前缀和 状压 折半
https://vjudge.net/problem/Gym-102222K 题意:给定N点M边的无向图,每个点有点权. 点覆盖表示某个点集S{}覆盖了所有的边,其贡献是S中点权之积. 现在让你求所 ...
- HDU 5324 Boring Class CDQ分治
题目传送门 题目要求一个3维偏序点的最长子序列,并且字典序最小. 题解: 这种题目出现的次数特别多了.如果不需要保证字典序的话直接cdq就好了. 这里需要维护字典序的话,我们从后往前配对就好了,因为越 ...
- DELPHI GDI + TGPFont UnitPixel 问题解决
查不少资料,在 GPfont := TGPFont.Create(fontFamily, Font.Size , FontStyleRegular,UnitPixel ); 时,显示的字体,并不是按D ...
- Java 中创建对象的 5 种方式!
Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 Employee类: class Employee implements Cloneable, Serializable { pri ...
- C++ 深入浅出工厂模式(初识篇)
初识工厂模式 我们先看工厂模式的介绍 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创 ...
- FreeSql (七)插入数据时忽略列
var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...
- SpringBoot修改默认端口号 及 上下文
- Winform中实现ZedGraph中曲线右键显示为中文
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- thymeleaf+layui加载页面渲染时TemplateProcessingException: Could not parse as expression
Caused by: org.attoparser.ParseException: Could not parse as expression: " {type: 'numbers'}, { ...
- [sonarqube的使用] sonarqube安装
一 . SonarQube代码质量检查工具简介 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量 Sonar 不只是一个质量数据报告工具,更是代码质量管理平台 支持Java, C ...