用 Electron 打包语雀
本文主要记录用 Electron 打包语雀的过程,并不会深入 Electron 这门技术。目前基本上用语雀作为个人笔记,但每次和其他标签页同在一个浏览器里,切换起来不是很方便,我希望可以作为一个桌面端应用,这样就可以:用 Alfred 快速打开、固定在 Dock 上、用 Command + Tab 快速切换。
在 Electron 之前,可以使用 Chrome 的 Create Shortcut 功能封装成一个 App,我之前也这么做过,但可定制化几乎没有,其中有一点我不喜欢:会打开新窗口。
我希望像桌面端应用那样所有的 Navigation 都在同一个窗口,而不会老是弹出新窗口。
是时候祭出 Electron 了!
一般生态良好的技术官网都会有快速入门的文档和示例。
之前没有用过,如何快速入门?最靠谱的就是去官网找 Quick Start 示例,Electron 也给我们提供了这样一个示例项目以便新手快速入门:
加载 URL
这个示例加载的是本地 HTML 文件,我们是加载 URL,所以需要改一下 main.js 并重启:
初始窗口最大化
此时我们发现初始窗口有点小,我想要打开的时候就是充满整个屏幕。如果设置 mainWindow 的 width 和 height 有点 hard code 的感觉,屏幕一换就又不对了,google 一下找到设置方法:mainWindow.maximize()
。
设置 Dock 图标
Electron 有专门针对 MacOSX 的设置,其中就有 dock 的相关设置:
禁止打开新窗口
其实最让我在意的就是这一点了,也是搜了好一会 google 和 Electron 文档才找到:
当页面请求打开地址为
url
的新窗口时触发。可以通过window.open
或外部链接 (如<a target='_blank'>
) 触发。默认情况下, 将为
url
创建新的BrowserWindow
。调用
event.preventDefault()
事件,可以阻止Electron自动创建新的 BrowserWindow 实例。 调用event.preventDefault()
事件后,你还可以手动创建新的 [BrowserWindow
](https://www.electronjs.org/docs/api/browser-window) 实例,不过接下来你必须用event.newGuest
方法来引用 [BrowserWindow
](https://www.electronjs.org/docs/api/browser-window) 实例,如果你不这样做,则可能会产生异常。 例如:
我们据此改造一下:
这样就可以实现跳转只在当前窗口进行,而不会创建新的窗口。
打包
上面的示例并没有包含打包逻辑,我们需要通过 electron-packger 进行打包操作:
然后在 package.json 中的 scripts 属性增加如下命令:
为了在 Dock 上显示的 App 名称是语雀而不是 Electron,我们还得在 package.json 增加一个属性:"productName": "语雀"
。
结束语
整个过程花了一个半小时,不算坎坷也没想的那么容易,非常享受这之间的过程,果然解决痛点是最让人兴奋的事情。
这篇文章就是在自己打包的语雀桌面版上敲的,舒服。
项目我在 GitHub 上开源了,有兴趣可以 Clone 自己也打包一个,很方便。
版权声明: 本文为 InfoQ 作者【封不羁】的原创文章。
原文链接:【http://xie.infoq.cn/article/94e20f7dcfa4ed30b6b5b39d3】。文章转载请联系作者。
评论