過去一直是程序語言Ruby愛用者,同時也是Ruby項目重要貢獻者的電子商務開發(fā)和托管平臺Shopify,在去年將原本以Ruby編寫的Shopify CLI工具,使用Node重新改寫,Shopify開發(fā)團隊現(xiàn)在公開了他們這項決定背后的原因和權(quán)衡。
Shopify CLI是Shopify平臺開發(fā)人員的重要工具,能夠用于構(gòu)建主題、應用程序和Hydrogen店面,使開發(fā)人員能以最佳實踐創(chuàng)建新項目與平臺集成,或是發(fā)布生產(chǎn)構(gòu)件供店家使用。Shopify CLI開發(fā)團隊發(fā)現(xiàn),開發(fā)Shopify應用程序的開發(fā)人員,在使用CLI上一直存在部分體驗問題,因此重新查看CLI開發(fā)語言選擇,希望做出一些改變。
Shopify CLI在2018年末的時候開始發(fā)展,Shopify開發(fā)團隊提到,考慮當時的語言資源和知識,他們?nèi)哉J為Ruby是一個明智的選擇。但是要使用Ruby開發(fā)的CLI,用戶計算機上需要安裝Ruby,開發(fā)團隊則通過提供安裝文件來解決這個問題,在2020年,Shopify開發(fā)團隊將ThemeKit集成到CLI中,在單一CLI中提供所有的開發(fā)功能集。
但因為Shopify CLI后來添加UI擴展組件支持,讓開發(fā)人員可以在平臺使用自己的UI擴展組件,這使得CLI開始依賴Node工具轉(zhuǎn)換和打包擴展程序代碼。另一方面,Hydrogen開發(fā)團隊也考慮使用Node構(gòu)建新工具,而不是將Hydrogen工作流程集成到Shopify Ruby CLI上,因為過去用戶常因沒有完成特定額外的步驟,導致CLI執(zhí)行遭遇問題,因此Hydrogen團隊希望用戶可以不再需要在系統(tǒng)安裝Ruby Runtime,只要使用NPM安裝指令就解決項目相依項目的需求。
考量Shopify越來越依賴JavaScript和Node Runtime的資源、工具和知識,因此Shopify開發(fā)團隊重新查看開發(fā)語言的選擇,希望新語言采用能盡量減少Runtime的安裝需求,使開發(fā)人員體驗獲得提升,而且內(nèi)部團隊也可以簡單貢獻,最后他們決定以TypeScript重寫CLI,并且在Node Runtime上運行。
Shopify內(nèi)部正在使用的語言除了最熟悉的Ruby之外,其次是Node、Go和Rust,Go和Rust以技術(shù)層面來說也是理想的選擇,Shopify開發(fā)團隊提到,Go和Rust程序能夠簡單編譯成二進制文件,因此用戶不需要安裝Runtime,但Shopify之所以最后選擇Node,是因為內(nèi)部團隊更熟悉Node,他們不希望語言成為內(nèi)部團隊貢獻CLI的障礙。
另外,使用Node來構(gòu)建CLI,還有一個有別于Ruby的特性,Node具有靈活的模塊系統(tǒng)和可擴展性,Node模塊系統(tǒng)中同一遞移組件的多個版本不會互相沖突。
Shopify CLI也在從Ruby更換到Node的過程,引入函數(shù)程序設(shè)計的概念,開發(fā)團隊解釋,Ruby CLI中的命令業(yè)務邏輯,屬于有狀態(tài)且具有非常多假設(shè),使得程序代碼更難理解、貢獻和測試,在Node CLI中他們采用更具函數(shù)性的邏輯,開發(fā)團隊沒有教條式的遵守函數(shù)程序設(shè)計規(guī)范,但他們目標讓邏輯成為傳遞狀態(tài)的函數(shù)組合,把JavaScript對象和函數(shù)當作組合單元,通過操縱傳遞的實例創(chuàng)建對象副本。
Shopify開發(fā)團隊提到,Node CLI明顯改善了開發(fā)人員體驗,雖然Hydrogen和應用程序開發(fā)人員現(xiàn)在只需要Node Runtime,但是主題開發(fā)人員仍需要Ruby和Node Runtime,Shopify開發(fā)團隊目前已經(jīng)著手移除對Ruby的依賴,這項工作將在今年稍晚時完成。