{"id":15043825,"url":"https://github.com/sunny-117/electron","last_synced_at":"2025-04-14T23:12:40.158Z","repository":{"id":252360546,"uuid":"840212263","full_name":"Sunny-117/electron","owner":"Sunny-117","description":"《Electron桌面客户端应用程序开发入门到原理》专栏","archived":false,"fork":false,"pushed_at":"2024-08-22T08:31:05.000Z","size":46382,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T23:12:31.982Z","etag":null,"topics":["electron","juejin"],"latest_commit_sha":null,"homepage":"https://juejin.cn/column/7400672360453259264","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sunny-117.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-09T07:55:54.000Z","updated_at":"2025-01-15T10:03:10.000Z","dependencies_parsed_at":"2024-09-25T01:52:32.301Z","dependency_job_id":"6a664d31-001e-4ca4-b648-6d2ccb0a18c9","html_url":"https://github.com/Sunny-117/electron","commit_stats":null,"previous_names":["sunny-117/electron"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Felectron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Felectron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Felectron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Felectron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sunny-117","download_url":"https://codeload.github.com/Sunny-117/electron/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248975328,"owners_count":21192210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electron","juejin"],"created_at":"2024-09-24T20:49:38.908Z","updated_at":"2025-04-14T23:12:40.143Z","avatar_url":"https://github.com/Sunny-117.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Electron\n\n\n本项目是 [《Electron桌面客户端应用程序开发入门到原理》专栏](https://juejin.cn/column/7400672360453259264) 源码+文章\n\n\n## 大纲\n\n**第一章 Electron快速入门**\n\n该章节是整个 Electron 课程的第一个篇章，主要聚焦于 Electron 基础相关的知识：\n\n- Electron 基本介绍\n- 进程和线程的概念\n  - 主进程和渲染进程\n  - 两者之间的通信\n  - 渲染进程之间的通信\n- 窗口相关的知识\n  - 基础的窗口知识\n  - 多窗口的管理\n- 应用常见的设置\n  - 快捷键\n    - 应用级别快捷键\n    - 全局快捷键\n  - 托盘图标\n  - 剪切板\n  - 系统通知\n- 系统对话框\n- 菜单\n  - 自定义菜单\n  - 右键菜单\n- 数据持久化方案\n  - 使用浏览器能力做持久化\n  - 使用Node.js能力做持久化\n- 生命周期\n- 预加载脚本和上下文隔离\n\n\n\n**第二章 实战案例：构建Markdown编辑器**\n\n本章会从原理着手：\n\n- Markdown原理\n  - 抽象语法树\n  - 常见的 Markdown 实现原理\n- 使用 Electron 构建 Markdown 编辑器\n  - 打开一个 Markdown 文档\n  - 保存文档\n  - 拖动一个文档到编辑器\n  - ...\n\n\n\n**第三章 实战案例：构建一个音乐播放器**\n\n同样是通过不断迭代的方式，一步一步完善音乐播放器。\n\n- 原生网页版音乐播放器\n- AmplitudeJS迭代音乐播放器\n- Electron版本音乐播放器\n- Vite、Vue、Electron搭建一个项目，继续迭代音乐播放器\n- Electron-Vite 迭代音乐播放器\n\n\n\n**第四章 Electron开发进阶**\n\n这一章的内容通常和业务逻辑关系不大，更多的是关于应用的健壮性以及一些周边功能的介绍。\n\n- 应用打包\n- 应用更新\n- 单元测试\n- 应用安全性\n- 异常处理\n- 日志处理\n  - 日志的记录\n  - 日志的上传\n\n\n\n**第五章 底层原理**\n\n这一章主要是聚焦于 Electron 底层一些比较重要的特性，针对一些非常重要的代码片段进行剖析。\n\n- Electron 源码目录的结构\n- Electron 如何做到跨平台\n- Electron 本身 API 是如何为开发者提供支持的\n- 进程间是如何通信\n- ...\n\n还会包含一些和 Electorn 相关的周边工具的原理剖析\n\n- electron-builder\n- electron-updater\n\n以及还会介绍一些看似和 Electron 工程没有关系，但是其实是比较重要的一些原理。\n\n- V8引擎执行的原理\n- 垃圾回收相关原理\n\n\n\n**第六章 Electron常见开发需求**\n\n- 点对点通信\n- 拼写检查\n- 窗口池\n- 原生文件的拖放\n- 最近文件列表\n- 屏幕截图\n\n该章节是一个长期更新的章节。\n\n\n\n**TODO**\n\n- Electron和不同构建工具的融合\n  - webpack\n  - rollup\n  - ....\n- Electron和其他现代前端开发技术的融合\n  - React\n  - Svelte\n  - Nuxt.js\n  - Next.js\n  - ....\n- 原生模块\n  - Windows系统的注册表\n  - 调用本地代码\n    - node-ffi：这是一个第三方模块，允许开发者直接通过 JavaScript 语法去调用动态链接库。\n    - N-API：V8引擎提供的，让开发者是在在 Node.js 中调用 C++ 实现的模块。\n  - 使用 C++ 编写一个原生模块，供你的 Electron 应用使用\n  - Electron 和 Qt 的整合\n- 应用的签名和分发\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunny-117%2Felectron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunny-117%2Felectron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunny-117%2Felectron/lists"}