在前端開發領域,JavaScript幾乎是一種不可避免的核心語言。但Basecamp(您可能知道他們的產品:Basecamp項目管理工具Hey mailbox)長期以來一直堅持一種理念:
如果你可以不使用JS,那就儘量不要使用JS。
Fizzy項目就是從這個概念中誕生的。
它不是一個框架,也不是一個UI庫,而是一個非常特殊的工具:
Fizzy允許您在Ruby風格的SL中描述前端行為,並自動將其編譯為可執行的JavaScript。
換句話說,
你編寫Ruby,它可以幫助你生成JS。瀏覽器只看到JS,但你看到Ruby的優雅。
Fizzy到底是什麼?
Fizzy是一個 Ruby-JavaScript轉換器 (more DSL轉換器)。其主要功能是:
- 閱讀Ruby風格的聲明性前端行為代碼(DSA)
- 將此代碼解析為抽象語法樹(AST)
- 然後將AST編譯成可由瀏覽器執行的JavaScript
- 最後,在瀏覽器中執行內置運行時
雖然這聽起來像魔法,但本質上是一種 前端行為編譯器.
為什麼有Fizzy?
因為Basecamp的Hotire/Turbo系統重點關注:
- 儘可能少地寫JS
- 更多地依賴HTML +更少的聲明性行為來完成交互
- 使前端開發更簡單、更可維護
但是,許多前端行為仍然需要JavaScript,例如偵聽事件、更新DOM等。
由於HotWire的世界是 以紅寶石為中心 ,為什麼不讓前端行為也像Ruby一樣編寫呢?
這就是Fizzy的意義:
用Ruby表達描述瀏覽器行為並自動將其轉換為JS。
開發人員不需要編寫JS或理解複雜的回調,只需編寫Ruby風格的SL即可。
一個簡單的例子
假設我們想要在單擊一個元素時輸出一個句子。
在傳統的前端框架中,您可能會寫:
Element. addEventHandler(「單擊」,()={
console.log(「Hello」);
});
在Fizzy背後的DSL中,您可以用Ruby風格編寫:
點擊即可
console.log「你好」
端
Fizzy會自動將其轉換為與前一個相同的JavaScript版本。
效果是一樣的,但風格完全不同。
⚙️ How does it do it inside?
Fizzy的結構分為三個部分:
- 解析器
負責分析Ruby風格的SL並生成語法樹。 - 編譯器
將語法樹轉換為現代JavaScript。 - 運行時
瀏覽器執行最小的JS庫來綁定事件並處理DSA行為。
不是為了誰?
- 想要建立大型SPA的開發者
- 嚴重依賴React/Vue的團隊
- 想要寫很多前端業務邏輯的人
Fizzy所做的不是「增強JS生態系統」,而是「減少JS的使用」。
它的定位非常明確:
幫助Ruby生態系統減少JavaScript,而不是取代前端框架。
如何使用?
項目本身仍然處於相對低級的形式,目前的使用傾向於:
- 訪問作為Hotire/Turbine的基礎機制
- 在構建流中作為Ruby DSL的編譯器
- 結合HTML中的行為聲明自動生成JS綁定
有關更多詳細信息,請查看存儲庫文檔(項目提供示例、測試代碼、運行時說明)。
總結
Fizzy是一個非常有趣、非常「Basecamp風格」的工具。
它的目標不是讓前端變得更複雜,而是讓它變得更簡單:
- 少寫JS
- 編寫更多Ruby風格的SL
- 該行為由編譯器自動處理
- 標準JavaScript仍在瀏覽器中運行
Github:https://github.com/basecamp/fizzy
管材: