---
# System prepended metadata

title: Electron 的 Trello 桌面版應用程式

---

---
layout: post
title: Electron 的 Trello 桌面版應用程式
date: 2016-11-12
published: true
---

# Electron 的 Trello 桌面版應用程式

## 啊 Electron 不就好棒棒

Electron 簡單來說就是加料版的 Chromium，可以跑 node 環境，還能讓 Web App 也能使用原生桌面環境的 API。我的桌面早就被一堆 Electron App 攻佔，最常用的就有：

* [Nylas N1](https://nylas.com/) - Email 軟體
* [Visual Studio Code](https://code.visualstudio.com/) - 微軟出的輕量級編輯器，兼具某種程度的 IDE 功能
* [Postman](https://www.getpostman.com/) - API 輔助工具
* [Slack](https://slack.com/) - 社內通訊
* [Notion](https://www.notion.so/) - 筆記，雜想
* [Hyper](https://hyper.is/) - 終端機，不過不能輸入中文所以就沒再用了。開發的 [zeit](https://github.com/zeit) 社也滿猛的
* [Caprine](https://github.com/sindresorhus/caprine) - Facebook messenger 桌面版

裝了這麼多 Electron App，相當於電腦裝了十幾個 Chrome，有夠肥一個就一百多 MB 😅，根本快速開發的代價（誒）。

Electron App 相對於傳統的桌面軟體迭代應該算十分快速了啦，光 Flexbox Layout 就不知道方便多少了...~~好啦其實我唯一寫過的傳統桌面軟體也只有用 JavaFX 學校作業，也只花了三天趕工哈哈哈...也是沒慢到哪裡去啦（？）~~

## Nativefier

有段時間我很喜歡用瀏覽器的「Pin Tab」功能，現在 SPA 又那麼猖狂，App 用 Chrome 開就行了，只要用 Chrome 的快速鍵 cmd + 1/2 就能直接切換於瀏覽的網站和 Web App。不過因為我自己裝的擴充功能實在太多 拖慢了 Chrome，如果用 Electron App 就相當於用一個乾淨的瀏覽器，速度快了許多。~~其實你把擴充功能移乾淨不就得了。~~

社群前陣子也有大大推了一個叫 [`nativefier`](https://github.com/jiahaog/nativefier) 的工具，只要敲幾行指令，就能把網站包到 Electron 的 WebView，立馬變桌面應用程式。

通常用 Electron 將現有網站包成桌面程式時，除了用 `BrowserWindow` 或 `webview` API 載入 Web App 網址外，還需要外載一些額外的 JavaScript 或 CSS，來整合原生桌面功能、送通知、快捷鍵綁定、自訂介面等等。

大神 sindresorhus 的 [Caprine](https://github.com/sindresorhus/caprine) 便是個好例子，在 Facebook Messenger App 上另外加了許多功能，甚至還有防止已讀功能 XDD。terkelg 的 [Ramme](https://github.com/terkelg/ramme) 插入 CSS 改變 Instagram 手機版網頁的排版、再加入了快速鍵綁定，便是一個**堪用**的 Instragm 桌面應用軟體了。BTW，真正好用的 IG 桌面版還是非原生莫屬，在此推薦一下 [Flume for Instagram](https://itunes.apple.com/us/app/flume-for-instagram/id792425898)，還是免費的 w。

## Trello feat. Electron

進入正題。最近重回了 Trello 懷抱，配合我的使用習慣，就去找了找對應的桌面軟體來用。找了兩個：

* [Paws for Trello](http://friendlyfox.es/pawsfortrello/)
* [Trello Desktop](https://github.com/danielchatfield/trello-desktop)

這兩個 App 看起來就是把 macOS 的 titlebar 藏起來讓紅綠燈好看一些。儘管前者在 App Store 上架，但感覺功能沒比後者多多少哈哈。

（**更新**：Paws for Trello 後來實作了一個漂亮的設定頁還有其它功能，嘴硬如我最後還是買了）
（**再更**：Paws 後來被 Trello 買走了，現在 Trello 推出了官方版的 macOS App，嗯，當然是免費下載 XDDD）

![](https://lh3.googleusercontent.com/gDwO7Rcc_DiHTqNTa9W8_u5WggQxm1km4TL630k66fGucUYCKoU4PEjqVodsSsB5wtw1rHket9Mnh-2qSyPWIU0Nn0TZsoLOitMniwifs2JFkgQJysppEK0rTDsPasRDvj1-axpA6oEanesF-42NvwTAWxeVmN-SjspdOPUxgdj8P9LkJPHACA49dCYXPfHrfbqP_SsFYKL7FlReq9b0Xbs5VWQmCPlWewyN12bZQq7-j3_POwhXRwPqFwvb5zfx9in7AibIxgz5wQAgNR-TUVwiPvN0nKIX5XrMVPCLHOgsHsIeFfQuHZuJaJ56kZ5kc-t9m11F5x0_BB6uoODrHd8UEumqEDA9hHGh8P4jnVMXYXmBZjGCcpSaIK_076JKVgUZ_cVxzcC_oDa0_YfS4Si-9qbT8RKEK-AMhvNKYVhsJ6z1N1ZCeG4O57uqmn0TzM6iBMQ_01LXYt1Db4AQxRdoE7m5PgbUU-WOkN_ZhJhRFcsIDxLoZT9gngSJlAZJT0j9t0G9hniF5uImwh7onklliQayTsA8N9PpJc-CpkrVjko3WjAbXyNqzrdm1QCDScI0PV2cEhFy4BJvsFFfZUrXl1W7PdYJJKHYfVUTRrDeAIIfiQ=w971-h626-no)


後者 Trello Desktop 雖然免費，目前有個最大的問題：沒辦法[拖拉視窗](https://github.com/danielchatfield/trello-desktop/issues/6)。

當然也有開發者直接發了 [Pull Request](https://github.com/danielchatfield/trello-desktop/pull/13) ，~~不過專案好像已經被放生了一樣，坑主都不回的~~。作為一個略懂 Electron 的開發者就來自行修正一下吧。(**更新：已經 merge 啦**)

仔細看下 [PR#13](https://github.com/danielchatfield/trello-desktop/pull/13) 也就加三行到 css，我要做的就是把這個 PR patch 到本機的 Trello Desktop App 裡。

做法有兩種，其中一種是 clone 改完的版本，重新建構 Electron 程式，不過太麻煩了，直接 patch 本機的 css 比較快。

## Patch Elecron Client code

[asar](https://github.com/electron/asar) 是 electron 封裝 client code 的格式，一般在建構 Electron App 會預設使用。我們先安裝下：

```bash
npm install asar -g
```

現在就可以用 `asar` 指令解開 `.asar` 檔了，進到 App Package 裡：

```bash
cd /Applications/Trello.app/Contents/Resources/
asar extract app.asar app # 解開 app.asar 檔案到 app 目錄
cd app # 進去 app 目錄
```

編輯 `browser.css` 加入更改的 css

```css
#header {
  -webkit-app-region: drag;
}
```

Electron 會讀取 app 目錄或 app.asar 檔案，重新開啟 App 後就可以自由移動視窗啦，跟桌面軟體有 87% 像！

![](https://lh3.googleusercontent.com/w7WF_SiDo7mrJanSRR72ieb_NTOPpblGcK-nMovxrnQvAG_1fcKuZ_EhIC_5_8-kXSIztIoEMk3l2gqoNlQx8VOS1UW98E6YVlBqV8qJOLD7YPAeY_eVZWWpdHkbtuBQh3O5g_xcFU-_IiHlVOcDVWiAdfdQipK7AmN7RHNs5fuTMLEo4ZDRZGH3ic9u92FT4A8n2z75P9y7kWMmYhQ_lyuFWaOSyxwXke_iJR0UY9L1uMnW856i651cuQNlp2br9rGAB-LSGKElDQpI64h2HxTk9eln2tMcvMG1SO9Qz6AF7kcbFanCL7uKv1AoGGX81qlGugiUtkq_I8uNASIVbPaeVxSdJniKa46DJuc-twautw6qdHUQ5jgpJyKOmUtbosVeJK5DS50jrsGzyOQPVbH7SzVpavlpKqnUAxOZ9AEAsxX0sf6cROCPtvHe3UvUqSTEwXk841vTgoxrS27ysLXVRVhdZe8CEE5vSbDIIObdHkV0CVULCWRKspmFInNEd4m-cvE4pHWdycItvMJo7dqN5gydHPIBZzU7z50b8Hn2_wYzUA7miYPvpMpOmsaW4BSOwkW1bPHGG0_2mf0gGWlR8URwayBvSouObSCoaDDGostsNw=w1188-h737-no)

（完）
