Electron+React应用打包全流程

 更新时间:2023年01月16日 08:31:24   作者:copcin  
本文主要介绍了Electron+React应用打包全流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

(第一次用 Typora 写博,希望效果不错~)

这几天有个创意编程比赛,要写一个电脑端应用。我准备用 React.js + Electron 做(因为熟悉~),编程部分一路风雨无阻,到了打包却出现了问题。Electron 没打过包不知道,一打包一下两天两夜就没了(T_T)但最后还是打包成功了~ 由于里面坑很多,把我打包的流程浅写在下面,供需要的人参考。

1. 打包工具的选择

粽锁粥汁,Electron 的打包工具有两个:electron-packager 和 electron-builder。它们都可以把 Electron 应用打包成可执行文件。这里我果断选择了 electron-builder。原因有两点:

1. 打包文件体积小。用 electron-packager 我试着打了下包,打出来一下子两个 G。要知道我写的只是一个小程序,就占用两个 G…… 而使用 electron-builder 打包出来的文件才 91M 多。装在电脑上也才 400 多 M。

2. 和普通应用几乎没有区别。electron-packager 只能生成“绿色版”,也就是没有安装程序,直接运行里面的 exe。而 electron-builder 使用 NSIS,可以把安装包打包出来。运行安装包可以安装应用,电脑设置也能识别得到,也很方便卸载。

2. 生成静态文件

这一步我们就是要把 React 项目的静态文件打包出来。这一步虽然简单,但也有几个坑需要注意。如果你使用 React Router,那 BrowserRouter 要替换成 HashRouter,因为 BrowserRouter 打包之后路由使用不了,路由组件本应该显示的部分直接白屏。

在这里插入图片描述

然后就可以执行打包命令了。这个应该有学过。对于 npm,运行 npm run build。对于 yarn,就把前面的 npm 换成 yarn。

打包生成出来的文件也不能直接用。如果直接用的话 index.html 加载不出 js 文件会导致白屏。打开生成出来的 index.html,把引入 js 的语句加上一个点。它代表从当前目录下的 static 加载 js。因为打包出来之后层级变了,直接使用 / 就变成从根路径加载 js 了。

在这里插入图片描述

最后就是把你应用的图标 favicon 的大小调整成 256x256。Electron 的应用图标大小必须要大于等于 256x256。别问我为什么,人家 electron-builder 要求的(T_T)

在这里插入图片描述

3. Electron 入口文件配置

Electron 入口文件(就是 main.js,Electron 开启的时候从这个文件开始加载)也是一个大坑。一不小心配置错误打包出来就又白屏了。Electron 入口文件的坑主要在于加载页面。

之前开发的时候使用的 loadURL(“localhost:3000”) 用不了了,因为我们要加载的是刚刚生成出来的静态页面。这里需要用到 loadFile 来加载一个 html 文件。毫无疑问肯定是要引入我们刚刚打包出来的 index.html。

首先把入口文件名字改为 main.js 然后移动到项目根目录(与 package.json 同级),然后把之前的 loadURL 删了,改成 loadFile(“build/index.html”),代表加载 build 下的 index.html 文件。网上大部分教程都是教的 path.join(__dirname, “xxx”) 这种形式,亲测无效。最简单的就是最好的~

在这里插入图片描述

4. electron-builder 配置

这是最重要的决定成败的一步。打开 package.json,首先你需要把 main 属性的值设置为 ./main.js,就是刚刚的那个 Electron 入口文件。
在这里插入图片描述

然后是 electron-builder 的配置了。这里我们只打包 Windows 的安装包。往 package.json 里加入如下代码。粘贴的时候注释“阅后即焚”~

"build": {
    "appId": "XXX", // 软件包名,填你软件的名字
    "productName": "XXX", // 产品名称,也填你软件的名字
    "copyright": "GPL 3.0", // 使用版权的名称,可选
    "directories": { // 一些用到的文件夹
      "buildResources": "build", // 需要打包的静态文件目录
      "output": "dist" // 打包文件目录,默认为 dist
    },
    "nsis": { // 安装包生成程序 NSIS 的配置
      "oneClick": false, // 是否一键安装
      "language": "2052", // 语言为中文
      "perMachine": true, // 按机器安装
      "allowToChangeInstallationDirectory": true // 允许用户自定义安装路径
    },
    "win": { // Windows 下的配置
      "icon": "./build/favicon.png", // 图标路径
      "target": "nsis" // 使用 NSIS 生成安装包
    },
    "files": [ // 需要打包进去的文件
      "build/**/*", // build 下所有静态文件
      "./main.js" // 入口文件 main.js
    ],
    "extends": null // 不使用扩展
}

最后在 script 里添加一个条目 builder,如下:

在这里插入图片描述

保存,就配置完成了~

(如果你想要配置其它平台或是其它配置,请参考官网配置说明:https://www.electron.build/configuration/configuration)

5. 准备打包文件

到这一步我们就可以安装打包工具 electron-builder 了。直接一行代码:npm i electron-builder --save-dev 或是 yarn add electron-builder -D。

electron-builder 在打包时需要很多依赖,从官方下载地址下载非常慢,所以我们要配置镜像。对于 npm,输入:

npm config set electron_mirror https://npmmirror.com/mirrors/electron/

对于 yarn,把上面的 npm 替换成 yarn 即可。

除此之外,electron-builder 还需要一些镜像站没有的依赖,要从 GitHub 上下载,我们可以把这些文件分别下载并解压在如下目录:

winCodeSign:C:\Users\用户名\AppData\Local\electron-builder\Cache\winCodeSign\winCodeSign-2.6.0

nsis:C:\Users\用户名\AppData\Local\electron-builder\Cache\nsis\nsis-3.0.4.1

nsis-resources:C:\Users\用户名\AppData\Local\electron-builder\Cache\nsis\nsis-resources-3.4.1

它们的下载链接:

winCodeSign:https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-2.6.0.7z

nsis:https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.1/nsis-3.0.4.1.7z

nsis-resources:https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z

PS. 如果你去 GitHub 上看这些文件,你可能会看见它们有更新的版本出来。但是人家 electron-builder 只认上面的版本,版本不对 electron-builder 还要重新下载。上次我就是下载了 nsis 更新的版本,然后导致了 electron-builder 又下载了一遍 nsis(T_T)

6. 打包过程

接下来就是最后的打包了。如果你的 electron 没有安装为 dev 依赖,请卸载之后重新安装并加上 --save-dev。

然后输入 npm run builder 开始打包。等待一会儿即可。它可能会报几个警告但是没事~

在这里插入图片描述

打包后你会看见生成了一个 dist 文件夹。dist 下有一个文件夹是 win-unpacked,里面是绿色版免安装的打包程序。运行里面的 .exe 文件就可以打开你打包后的应用了。

在这里插入图片描述

如果发现有白屏(其实上面所有的排坑都是为了避免白屏),可以在 main.js 里把开发者工具开起来,然后打包运行,根据它的报错进行相应的调整。不过上面排了那么多坑应该不会白屏了~

dist 下的 .exe 文件就是你应用的安装包,安装到电脑上就可以跟普通软件一样使用了。

在这里插入图片描述

如果能成功运行,你的 React.js + Electron 应用就打包完成了,恭喜~

P.S. Electron 应用也是真的大,即使使用 builder 打包也还要 400 多 M,看来前端即使有了 Electron 和原生后端应用还是有些差距~

到此这篇关于Electron+React应用打包全流程的文章就介绍到这了,更多相关Electron React应用打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于React Native报Cannot initialize a parameter of type''NSArray<id<RCTBridgeModule>>错误(解决方案)

    关于React Native报Cannot initialize a parameter of type''NSArra

    这篇文章主要介绍了关于React Native报Cannot initialize a parameter of type'NSArray<id<RCTBridgeModule>>错误,本文给大家分享解决方案,需要的朋友可以参考下
    2021-05-05
  • React如何以Hook的方式使用Echarts

    React如何以Hook的方式使用Echarts

    这篇文章主要介绍了React如何以Hook的方式使用Echarts问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • React网络请求发起方法详细介绍

    React网络请求发起方法详细介绍

    在编程开发中,网络数据请求是必不可少的,这篇文章主要介绍了React网络请求发起方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • 如何在React项目中使用AntDesign

    如何在React项目中使用AntDesign

    我们在后台管理系统React项目开发中会有Table表格、Form表单、List列表、Button按钮等组件,这个时候我们可以使用AntDesign来减少开发中不必要的样式问题,本文就介绍了eact项目中使用AntDesign,感兴趣的可以了解一下
    2022-04-04
  • react组件实例属性state详解

    react组件实例属性state详解

    这篇文章主要介绍了react组件实例属性state,有状态state的组件称作复杂组件,没有状态的组件称为简单组件,状态里存储数据,数据的改变驱动页面的展示,本文结合实例代码给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • 浅谈redux以及react-redux简单实现

    浅谈redux以及react-redux简单实现

    这篇文章主要介绍了浅谈redux以及react-redux简单实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • React中的useState和setState的执行机制详解

    React中的useState和setState的执行机制详解

    这篇文章主要介绍了React中的useState和setState的执行机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • React受控组件与非受控组件实例分析讲解

    React受控组件与非受控组件实例分析讲解

    具体来说这是一种react非受控组件,其状态是在input的react内部控制,不受调用者控制。可以使用受控组件来实现。下面就说说这个React中的受控组件与非受控组件的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • React中使用async validator进行表单验证的实例代码

    React中使用async validator进行表单验证的实例代码

    react上进行表单验证是很繁琐的,在这里使用async-validator处理起来就变的很方便了,接下来通过本文给大家介绍React中使用async validator进行表单验证的方法,需要的朋友可以参考下
    2018-08-08
  • 一文详解如何React中实现插槽

    一文详解如何React中实现插槽

    这篇文章主要为大家详细介绍了如何在React中实现插槽,文中的示例代码讲解详细,对我们的学习或工作具有一定的借鉴价值,需要的可以了解一下
    2023-03-03

最新评论