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

个人electron教程系列

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

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

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

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

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

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

 

引言

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

有两个流行的工具能够作到这一点: electron-builder 和 electron-packager.api

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

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
相关文章
相关标签/搜索