🔰 介紹

Eask的名字源自於Emacs Cask; 如果你已經有使 用過Cask的經驗, 那基本上你可以跳過這階段. 對於不了解或沒使用過的人, 在此我還是加減 介紹一下:

(NOTE: 原則上這裡的EaskCask是可以互相替換的)

Eask是個Emacs Lisp的套件管理工具, 有點類似於Node.jsnpm, 但不全然是. 畢竟工具還不夠齊全, 而且Emacs生態也不適合npm那樣的模式. 所以簡單來說, Eask 可以是個劣化版的npm. 下面連結的 Why Cask? 有著更好的解釋

❓ 那為什麼用要Eask, 而不是Cask?

以下是簡單的優劣展示表格:

Behind technologyCross-PlatformEmacs VersionSize
CaskBash, Batch, and Python (Windows)❌ Good on Linux and macOS, but it’s particularly bad on Windows24.5+3,000+ lines
makem.shShellscript❌ Doesn’t work on Windows by default26.1+1 file, 1200+ lines
EldevBash, Batch, and Powershel, etc✔ Good, but qutie slow on Windows24.4+4,000+ lines
EaskNode or Native Executables✔ Good, and it can be compiled to native executables26.1+3,000+ lines

(這是我直接複製貼上的, 原文可以參考.)

Eask的優點來自於它背後的技術選擇是使用Node.js; 而不是基礎的Shellscript, Bash, Batch, 等等. 雖然必須使用Node runtime, 但我們可以透過pkg (感謝vercel)打包來解決這問題! (這樣我們就可以跳過安裝Node.js)

使用Node.js並且還多了一步npm install確實比較麻煩, 但這大概是Eask唯一的缺點. 好在 pkg解決了這問題! 我們接著看優點:

  1. Eask 可以包成原生程序, 這算是一個優點! 速度上相比可能會稍微快一些!
  2. 繼承了CaskDSL設計; 基本上可以無痛轉移!
  3. Eask不像是Cask; 本身就是個Elisp檔案, 有點類似於init.el的功用 (這結合了Cask +Eldev的優點)
  4. 使用了高階語言JavaScript; npm有很龐大的生態, 如果有Emacs不方便做的, 我們可以 交由這層來做 (例: exec, init)
  5. Eask使用 yargs 來當作CLI解析器; 這促使我們 只需要專注在開發上即可!
  6. Eask不用每次都呼叫Emacs; 這在 Windows 很吃香; 因為Windows開進程非常慢 (這就是 為什麼EldevWindows系統下體驗不佳的原因)
  7. 跨平台; 目前除了Eldev其他都不支援Windows
  8. 非常容易擴充, 結構明確; 目前Cask, Eldev, 和 makem.sh每個單獨檔案都很大, 維護成本高且不易, 未來面對新功能也是比較吃力
  9. 全域-g旗標讓你可以更好管理你的Emacs配置

那Eask沒有缺點嗎?當然有!

  1. 開發比較困難, 你需要知道JavaScriptnpm生態
  2. Eask是採取一個指令一個檔案制; 所以有非常多的檔案散佈在各區
  3. 專案結構相比其他都複雜許多; 對於不習慣這種分類法的人會很痛苦

🧙‍♂️ 結語

比較這麼多優缺點, 我還是會選擇Eask. 畢竟這專案未來的發展性會比其他的都高出許多.我認為 JavaScriptnpm也非常好上手, 問題並不大!

我個人長期在Windows上使用Emacs; 其實是蠻折騰人的. 因為大部分的插件在Windows 下都是壞掉的, 好一點就是體驗不佳. 我很少會遇到體驗好的插件. 例如 magit, helm很慢. eping不支持Windows. docker.el上次安裝掛了, 等等. 多倒數不清.

以前大家都用Cask, 但都往往不在 Windows 上做測試; 因為難用, 測試起來也不方便. 還需要特別安裝Python, PythonWindows上的體驗也不好. 因此Eask誕生了, 兼容CaskDSL並保持了工作流程的一致性. 希望大家多多使用Eask來執行跨平台的測試! 或許哪天EmacsWindows下有更好的使用者體驗… 聽了這麼多, 你們怎麼看呢?


話說我因此學到了Hugo; 有空再來分享一下!


🔗 連結