当前位置:首页 > 技术分析 > 正文内容

使用 electron-builder 打包 Electron 程序

ruisui882个月前 (03-01)技术分析10

前言

在将 Electron 代码开发完成后,如果想要投入生产环境,那就必须经过很关键的一步——打包。

今天就将 MacOS 上使用 electron-builder 打包 Electron 应用的过程做一个记录。

为什么要打包

我上一篇文章《使用 VSCode 调试 Electron 主进程代码 - 掘金》介绍了在开发环境下运行 Electron 程序的方法,既然可以正常运行了,那为什么还需要经过打包的步骤呢?原因如下:

  1. 为了实现跨平台的目的 在打包之前,如果我将源码拷贝一份到其他操作系统(比如 windows)上,那要正常运行的话,必须在对应的系统上安装适配该系统的 Electron 执行程序。 为了减小跨平台的复杂度,我们需要针对各个不同的平台,将程序代码打包成适配平台的应用程序,达到直接使用的目的。
  2. 为了减小代码体积 一个最基本的 Electron 程序,其开发环境代码体积大约 170MB,因为有较多开发依赖(devDependencies),对于程序的传输极不友好。 可以通过打包的手段,排查掉众多开发依赖,精简应用代码体积。

环境

打包步骤

第一步:安装 electron-builder

mkdir electron-builder
cd electron-builder
yarn init -y
yarn add electron-builder -D

这里建议将 electron-builder 安装在单独的目录,方便复用。

第二步:添加打包指令(也可直接在终端执行)

// electron-quick-start/package.json
{
    "name": "myApp",
    ……
    "scripts": {
        ……
        "build": "../electron-builder/node_modules/.bin/electron-builder"
    },
    ……
}

执行 npm run build 之后,终端信息如下:

> Executing task: npm run build <
> myApp@1.0.0 build
> ../electron-builder/node_modules/.bin/electron-builder

  ? electron-builder  version=22.14.5 os=19.6.0
  ? writing effective config  file=dist/builder-effective-config.yaml
  ? packaging       platform=darwin arch=x64 electron=16.0.6 appOutDir=dist/mac
  ? default Electron icon is used  reason=application icon is not set
  ? skipped macOS application code signing  reason=cannot find valid "Developer ID Application" identity or custom non-Apple code signing certificate, see https://electron.build/code-signing allIdentities=     0 identities found
                                                Valid identities only
     0 valid identities found
  ? building        target=macOS zip arch=x64 file=dist/myApp-1.0.0-mac.zip
  ? building        target=DMG arch=x64 file=dist/myApp-1.0.0.dmg
  ? building block map  blockMapFile=dist/myApp-1.0.0.dmg.blockmap
  ? building block map  blockMapFile=dist/myApp-1.0.0-mac.zip.blockmap

electron-quick-start 下生成的 dist 文件夹,其文件结构如下:

./dist
├── builder-debug.yml
├── builder-effective-config.yaml
├── latest-mac.yml
├── mac
│   └── myApp.app
├── myApp-1.0.0-mac.zip
├── myApp-1.0.0-mac.zip.blockmap
├── myApp-1.0.0.dmg
└── myApp-1.0.0.dmg.blockmap

第三步:打包配置

可根据自己的需要,在 package.json 中增加配置项。

// electron-quick-start/package.json
{
    "name": "myApp",
    ……
    "scripts": {
        ……
        "build": "../electron-builder/node_modules/.bin/electron-builder"
    },
    ……
    "build": {
        "productName": "myFirstApp",    // 指定打包成的程序名称,可包含空格
        "appId": "bianchengsanmei",
        "directories": {
            "output": "build" // 指定打包程序的输出目录
        },
        "mac": {
            "target": "dmg"
        },
        "dmg": {
            "backgroundColor": "#fff"
        }
    }
}

具体相关配置可查看 electron-builder 官方文档(
https://www.electron.build/#/)。

打包前后体积比较

开发环境总体积:

打包生成的 .dmg 安装包体积:

可以看到,通过打包,使得程序体减少了一大半。

总结

以上就是一次简单的 Electron 应用打包过程,希望能够对你有所帮助。

~

~ 本文完,感谢阅读!

~


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧 的个人主页 - 动态 - 掘金〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2364.html

分享给朋友:

“使用 electron-builder 打包 Electron 程序” 的相关文章

国产操作系统上Vim的详解03--安装和使用插件 | 统信 | 麒麟 | 中科方德

原文链接:国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插件管理器,可以帮助我们轻松地安...

有效地简化导航-Part 1:信息架构

「四步走」——理想的导航系统要做一个可用的导航系统,网页设计师必须按顺序回答以下4个问题:1. 如何组织内容?2. 如何解释导航的选项?3. 哪种导航菜单最适合容纳这些选项?4. 如何设计导航菜单?前两个问题关注构建和便签内容,通常称为信息架构。信息架构师通常用网站地图(site map diagr...

SpringCloudalibaba+Vue开发仿社交小程序-青牛白马七香车

Spring Cloud Alibaba和Vue是当今开发领域中最为流行的技术组合之一。本文将介绍如何使用Spring Cloud Alibaba和Vue开发仿社交小程序。download: https://www.97yrbl.com/t-1632.html项目概述本项目是一个仿社交小程序,包括用...

Alpine.js 如何火起来的!比 React/Vue 如何?

大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言前端 JavaScript 框架的创新是这个时代最伟大的技术文化现象之一。Alpine 发音为 /??lpa?n/,中文为阿尔卑斯山、...

嵌入式实操——基于RT1170 使能SEMC配置SDRAM功能(八)

本文主要是通过迁移的思维,记录本人初次使用NXP MCUXpresso SDK API进行BSP开发MCUXpresso SDK SEMC API 接口链接  在MCUXpresso SDK 框架下提供了对SEMC DDR进行操作的接口。学习链接:https://community.nxp.com/...

什么是同步通信?什么是异步通信?它们有什么区别?

串行通信一般又分为同步和异步通信,同步通信需要同步时钟信号,而异步通信则不需要同步时钟信号。同步通信:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步通信:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。同步通信与异步通信有什么区别呢?1、同步通信要求接收端...