我的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. SDU暑期集训排位(4)

    SDU暑期集训排位(4) C. Pick Your Team 题意 有 \(n\) 个人,每个人有能力值,A 和 B 轮流选人,A 先选,B 选人按照一种给出的优先级, A 可以随便选.A 想最大化己 ...

  2. 【转 | 侵删】2D 绘图技术中的坐标系统与坐标变换

    本文介绍在 2D 绘图技术中的坐标系统和坐标变换的相关知识.同时介绍 Kity 在这方面提供的 API .希望这些知识对于需要进行图形应用开发的同学会有所帮助. 锤子的故事 很久以前,有一个画家,他很 ...

  3. codeforces 454 D. Little Pony and Harmony Chest(状压dp)

    题目链接:http://codeforces.com/contest/454/problem/D 题意:给定一个序列a, 求一序列b,要求∑|ai−bi|最小.并且b中任意两数的最大公约数为1. 题解 ...

  4. hdu 3709 Balanced Number(数位dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题意:给定区间[a,b],求区间内平衡数的个数.所谓平衡数即有一位做平衡点,左右两边数字的力矩相 ...

  5. 洛谷p2015二叉苹果树&yzoj1856多叉苹果树题解

    二叉 多叉 有一棵苹果树,如果树枝有分叉,可以是分多叉,分叉数k>=0(就是说儿子的结点数大于等于0)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1~N,树根编号一定是1.我们用一根树枝两 ...

  6. Optional和Stream的map与flatMap

    Optional的map和flatMap Optional存在map和flatMap方法.map源码如下 public<U> Optional<U> map(Function& ...

  7. jinfo Java配置信息工具

    jinfo(Configuration info for Java) jinfo的作用是实时地查看和调整虚拟机各项参数. jinfo 命令格式: jinfo [ option ] pid pid是虚拟 ...

  8. openresty域名动态解析

    工作中使用openresty,使用第三方服务API通过域名访问.但是,域名通过DNS解析出来之后,在openresty是有 配置解析阶段 很多时候我们会在 Nginx 配置文件里配置上一些域名,比如配 ...

  9. response向客户端写入数据

    1.写入文字: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Servle ...

  10. 55 (OC)* 图片圆角处理

    iOS图片设置圆角性能优化   问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建 ...