我的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中的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

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

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

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

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

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

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

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

  4. electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  5. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  6. Electron开发跨平台桌面程序入门教程

    最近一直在学习 Electron 开发桌面应用程序,在尝试了 java swing 和 FXjava 后,感叹还是 Electron 开发桌面应用上手最快.我会在这一篇文章中实现一个HelloWord ...

  7. 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word

    现在基于 js 和 web浏览器核心构建的 C/S 程序越来越多,比如微信桌面版(基于 duilib 和 cef).VS CODE(基于electron)等,出于了解的目的,最近学习了 electro ...

  8. 【Electron】Electron开发入门(五):项目打包

    一.安装 electron-packager PS:安装之前,先复制一份package.json文件到./app目录下,然后改下./app目录下package.json里 "main&quo ...

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

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

随机推荐

  1. Codeforces Round #506 (Div. 3) 1029 D. Concatenated Multiples

    题意: 给定n个数字,和一个模数k,从中选出两个数,直接拼接,问拼接成的数字是k的倍数的组合有多少个. 思路: 对于a,b两个数,假定len = length of (b),那么a,b满足条件就是a ...

  2. hdu6354 杭电第五场 Everything Has Changed 计算几何

    Everything Has Changed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java ...

  3. codeforces 766 D. Mahmoud and a Dictionary(种类并查集+stl)

    题目链接:http://codeforces.com/contest/766/problem/D 题意:给你n个单词,m个关系(两个单词是反义词还是同义词),然后问你所给的关系里面有没有错的,最后再给 ...

  4. CF981B Businessmen Problems map 模拟 二十二

    Businessmen Problems time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. GNU大型项目构建和覆盖率生成(第一篇)

    目录 0. 序言 1. 项目描述 2. 项目构建 2.1 编译规则 2.2 构建过程 3. 覆盖率分析 0. 序言 在开始正文之前,请允许我先说明一下本文的目的和写作的动机,好让读者不惑. 我们知道, ...

  6. 用lnmp架构部署wordpress网站详细步骤

    用lnmp架构部署wordpress网站 ①.下载和上传网站代码 用winscp或者xftp, 或者xshell下执行rz命令进行上传网站的包文件. ②.解压程序代码,并将程序代码保存到站点目录,并进 ...

  7. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  8. Go语言标准库之flag

    Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单. os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. ...

  9. Apache JMeter (二)性能测试 入门实例

    上一节我们说了关于Jmeter环境的配置,接下来讲一个测试的实例. 1.运行Jmeter 进入Jmeter程序所在目录,运行"bin/jmeter.bat" Jmeter支持中文, ...

  10. 解决The mysql extension is deprecated and will be removed

    今天打开网站突然发现报错:“PHP Deprecated:  mysql_connect(): The mysql extension is deprecated and will be remove ...