Logo Vincent
返回文章列表

Electron-开发实践:使用Monorepo管理Electron项目

Electron
Electron-开发实践:使用Monorepo管理Electron项目

【前言】

本文讲如何用 monorepo 来管理一个 electron 项目

代码地址: https://github.com/uikoo9/dishi-monorepo/tree/electron-monorepo

【初始化】

首先需要初始化一个 monorepo 前端项目,

具体步骤可以看这里: 初始化前端Monorepos项目

初始化后项目结构如下,

【渲染进程】

采用 monorepo 来管理项目的好处是

1.各端或者各模块只需要负责自己的 package 即可

2.如果各个 package 有相互依赖可以很好的解决

本文中的渲染进程在 packages/dishi-renderer,

采用 react+webpack 实现了渲染进程,

这里不限制具体的实现技术,

比如你可以用 react,vue,甚至 jquery,

构建工具可以使用 webpack,rollup,vite 等,

但是需要有一个 build 命令,

  "scripts": {
    "build": "qwebpack build ./electron.webpack.js"
  },

这个build 命令将渲染进程的构建产物,

生成到 packages/dishi-main/renderer 文件夹下,

这样做的好处

1.独立

渲染进程,偏传统的前端 web 开发,

只需要关注自己的 package,即 packages/dishi-renderer,

这里可以采用你想用的任何技术,只要可以实现最终的 ui 效果

2.精简

只将最终的构建产物生成到主进程下,

这样不会引入多余的 npm 包依赖,

减少最终应用包的大小

3.缓存

这里如果你使用 lerna 和 nx 来管理项目,

一文学会用Lerna管理多个npm包

强大的构建系统:NX

Nx-VS-Lerna

那么可以在项目外层的 package.json 中添加如下命令,

{
    "build": "lerna run build --scope=dishi-renderer",
}

添加后即可使用 nx 的缓存能力,如下

如果没有使用 nx,每次构建大概 2-3s,

如果使用了 nx,且源码没有改动,每次构建大概ms 级别,

【主进程】

本文中的主进程在 packages/dishi-main 下,

可以看到主进程代码在 main 文件夹下,

渲染进程代码是 dishi-renderer 这个 package 构建到 renderer 文件夹下的,

另外 package.json 内容也比较简单,

因为这个 packag.json 是打包后的入口,

{
  "name": "dishi",
  "private": true,
  "version": "2.0.3",
  "main": "main/index.js",
  "dependencies": {
    "qiao-electron": "^3.2.6",
    "qiao-json": "^3.1.2",
    "qiao-sqlite": "^3.2.3"
  }
}

【启动和打包】

可能有的人会问了,

为什么在主进程的 packaeg.json 中没看到启动的 start 命令呢,

这里要讲到 packages/dishi-electron,

这个包有两个作用

1.提供开发时的 electron 环境

2.将应用打包

启动

启动是指依赖 electron 这个包,本地启动应用,

但是 electron 这个包又不需要依赖到主进程中,

因为打包的时候会将 electron 的环境打包进去,

所以在 dishi-electron 这个 package中的依赖如下,

{
  "name": "dishi-electron",
  "private": true,
  "version": "2.0.6",
  "devDependencies": {
    "electron": "^25.1.1"
  },
  "scripts": {
    "start": "electron ../dishi-main"
  }
}

这里就可以用 start 命令来本地启动应用了,

同时在最外层的 package.json 中也可以添加命令,

方便使用,

{
    "build": "lerna run build --scope=dishi-renderer",
    "start": "npm run build && npm run start -w dishi-electron"
}

打包

另一个部分能力就是打包应用了,

完整的 package.json 内容如下:

{
  "name": "dishi-electron",
  "private": true,
  "version": "2.0.6",
  "devDependencies": {
    "electron": "^25.1.1",
    "electron-icns": "^3.2.3",
    "qiao-electron-cli": "^3.3.0",
    "qiao-file": "^3.1.9"
  },
  "scripts": {
    "start": "electron ../dishi-main",
    "icon": "electron-icns ./pack/icon/pic.png",
    "dist": "gulp -f ./pack/gulp/pack-dist.js",
    "packmac": "qelectron pm ./pack/electron.config.js",
    "packdmg": "qelectron pd ./pack/electron.config.js",
    "uploaddmg": "qelectron ud ./pack/electron.config.js"
  }
}

打包的具体方法,在另外的文章介绍

【总结】

1.使用 monorepo 来管理一个 electron 项目

2.packages/x-renderer 用来存放渲染进程代码

3.packages/x-main 用来存放主进程代码

4.packages/x-electron 用来提供 electron 本地环境和打包应用

相关推荐

Electron-开发实践:注册苹果开发者账号

【前言】 当使用electron开发完一个mac应用后, 如果想正常在mac电脑上使用, 还需要对你的应用进行签名和公证, 而签名和公证都需要一个苹果开发者账号, 这个过程中有一些坑,记录一下。 【注册】 注册地址: https://developer.apple.com/cn/programs/e

Electron-开发实践:clipboard剪切板

【前言】 Electron提供获取和写入系统剪切板的操作, 详见:https://www.electronjs.org/docs/latest/api/clipboard 【进程】 clipboard支持主进程使用,支持没有开启sandbox的渲染进程使用 【系统】 大部分clipboard的api

Electron-开发实践:crash上报及解析

【前言】 electron开发实践中,crash的上报不可避免, electron中可以通过crashReporter来上报crash, https://www.electronjs.org/docs/latest/api/crashreporter , 而处理crash使用的是crashpad,有

Electron-开发实践:DMG安装包定制

【前言】 dmg文件是mac端常见的安装包格式, 前面几篇文章已经使用electron开发并打包好一个应用了, 本文主要讲下定制dmg安装包, 前面几篇文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Elect

Electron-开发实践:包体积精简

【前言】 前面几篇文章讲了从开发electron应用到mac打包, 相关文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 Electron开发实践:Mac打包 Electron开发实践:注册

Electron-开发实践:制作icns图标

【省流】 封装了一个mac上将png转为icns的应用, 欢迎大家使用: https://electronicns.com/ 【前言】 将Electron应用打包为Mac应用包的时候, 这里以electronpackager打包为例, 默认打包运行后的应用图标是这样, 【icns】 按electro

Electron-开发实践:本地日志

【前言】 使用electron开发好本地应用后, 本地日志记录必不可少, 这样可以通过日志获取用户操作信息以及定位bug等, 本地日志与实时性的埋点上报稍微有不同, 本地日志量更大,信息更全,且不是所有信息都时候上报。 【与nodejs本地日志的异同】 electron写本地日志和nodejs写本地

Electron-开发实践:定制Mac菜单

【前言】 前面几篇文章讲了从开发electron应用到mac打包, 相关文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 Electron开发实践:Mac打包 Electron开发实践:注册

Electron-开发实践:Mac应用包签名和公证

【前言】 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 当你通过上面这些文章使用Electron开发好一个桌面应用, Electron开发实践:Mac打包 并通过这个文章在本地打包好了mac的应

Electron-开发实践:Mac打包

【前言】 当本地开发好一个 electron 应用后, 最想做的事情就是打包然后分享出去。 如何用 monorepo 管理一个 electron 项目, 可以看这里: Electron开发实践:使用Monorepo管理Electron项目 【构建】 接上一篇,打包是在 packages/dishie

Electron-开发实践:注册快捷键

【前言】 本文介绍一下electron应用中如何注册快捷键 【主进程】 主进程注册快捷键比较简单,需要注意的是在app ready后使用, 常见键盘映射: https://www.electronjs.org/docs/latest/api/accelerator 另外在推出app时需要将所有注册的

Electron-开发实践:几种更新方式

【前言】 Electron开发桌面APP后, 接着涉及一个问题就是如何更新后续的版本, 本文介绍几种更新的方式。 【Electron架构】 用Electron开发的桌面APP, 其实包含几个部分: 1\. Electron本身的环境 2\. 主进程,主进程中又分为Nodejs部分,和非Nodejs部

Electron-开发实践:创建Window

【前言】 Electron入门就需要创建一个window, window是用来展示ui的, window是在渲染进程。 【创建window】 新建一个前端项目, package.json内容如下, 可以看到安装了Electron的开发依赖, 即执行过下面的命令, 且有一个start命令用来本地启动E

一篇文章学会Electron

【前言】 javascript语言的强大生命力,为前端开发拓展了很多业务 网页端业务:基于js,html,css开发网页相关业务 服务端业务:基于nodejs开发服务端业务 桌面端业务:基于chromium和nodejs开发桌面业务 移动端业务:基于webview开发移动端业务 【electron简

Electron-开发实践:本地数据库SQLite

【前言】 本地存取数据的一些常见的手段:Cookie,LocalStorage,IndexedDB,SQLite等, 这里做下简单的对比 Cookie 存储大小:4k 设置有效期:可以 服务端获取:可以 特点:简单数据存取 LocalStorage 存储大小:5M 设置有效期:不行 服务端获取:不行

© 2026 vincentqiao.com . 保留所有权利。