2024 年 Node.js 將引入 TypeScript 支援,社群引起激烈討論

#新聞快訊

2024 年 Node.js 將引入 TypeScript 支援,社群引起激烈討論

就在前幾天(7/25),Node.js 合併了關於實驗性支援 TypeScript 的 PR,這一決定引起了廣泛的關注與討論。社群成員卻在這項功能相關的 GitHub Pull-Request 討論串中對支援的方法以及版本相容性都提出許多意見,甚至一度因為討論過激而被鎖定。

技術指導委員會成員 Marco Ippolito 表示,這項功能「對於推動生態系統向前發展至關重要,我們所看見的所有意見調查,都反應了這個需求,根本無法忽視。」

這篇文章將深入探討這一更新的背景、技術細節,以及對開發者社群的影響。

背景介紹

JavaScript 長期以來一直是 Node.js 的主要語言,但隨著 TypeScript 在開發者中的流行,越來越多的開發者希望能夠在 Node.js 中直接使用 TypeScript。TypeScript 是由微軟開發的超集語言,增加了靜態類型檢查等功能,使得代碼更易於維護和理解。

由於 Node.js 並不支援 TypeScript,過去只能先編譯成 JS 後再執行。社群上有許多間接的解決方案或工具鏈,例如 ts-node 就是為了讓 Node 執行 TypeScript 的過程更無縫,減少重複編譯的繁瑣步驟。

Node.js 的實驗性 TypeScript 支援

Node.js 團隊認識到 TypeScript 的重要性,並且在最新版本中引入了實驗性的支援。這項更新允許開發者藉由附加「實驗標誌」,來直接運行 TypeScript 檔案,而不需要額外的編譯步驟或工具鏈。這意味著開發者可以更加無縫地將 TypeScript 引入他們的 Node.js 專案中,從而提高開發效率。

這次所增加的實驗標誌是--experimental-strip-types,顧名思義,它從程式碼中擦除類型並將 TypeScript 轉換為 JavaScript。

然而,這一實驗性支援並不包括 TypeScript 的所有特性。具體來說,目前僅支持類型擦除(strip types),並將 TypeScript 轉換為 JavaScript。而其他特性,如枚舉(enums)和tsconfig.json 設定,目前仍然不被支持。

另外, Sourcemap(用於在 JavaScript 縮小或以其他方式進行部署時被破壞時調試 JavaScript) 也不會生成,但透過用空白行號替換內聯類型來保留。也不支援使用 node_modules 內的 TypeScript 依賴套件。

因此,開發者可能需要借助其他工具來獲得完整的 TypeScript 體驗。這表示,與社群期待的完全無縫執行 TypeScript 還是有一定程度落差。

為什麼選擇這一方向?

Node.js 團隊表示,這一更新的目的是為了降低新手開發者進入 TypeScript 生態系統的門檻,同時不對現有的 JavaScript 工作流程造成過多的干擾。通過這個方法,Node.js 試圖在不引入過多複雜性的情況下,提供一個更加強大的開發工具。

此外,這一實驗性功能的推出也反映了 Node.js 社群對 TypeScript 日益增長的需求。隨著越來越多的企業和開發者採用 TypeScript,Node.js 團隊認為有必要提供內建的支援來滿足這一趨勢。

實踐中的挑戰

雖然這一更新對於許多開發者來說是個好消息,但也帶來了一些挑戰。首先,因為這只是實驗性支援,未來可能會有很多變動,這要求開發者在使用時需要保持謹慎。

其次,由於並非所有 TypeScript 特性都被支持,開發者可能需要額外的工具和配置來實現完整的 TypeScript 支援。這使得整體的開發流程仍然相對複雜,特別是對於那些完全依賴 TypeScript 的專案。

而社群反應最大的一個問題,在於許多開發人員認為,新版本的 TypeScript 可能與 Node.js 不同步——尤其是如果繼續使用 Node.js 的長期支援版本。

不過,現在的執行路線圖,其實是允許將來添加更多功能的,Ippolito 表示,預計要執行的新功能清單,「未來會持續調整」。

社群反應與未來展望

Node.js 的這一決定受到了廣泛的關注與討論,可以參考以下頁面:

許多開發者對這一實驗性功能表示歡迎,認為這是 Node.js 生態系統向前邁進的重要一步。然而,也有一些開發者擔心這會導致社群分裂,因為不同的開發者可能會選擇不同的技術路徑。

未來,Node.js 是否會將這一實驗性功能正式化,並擴展對更多 TypeScript 特性的支援,將取決於社群的反饋和使用情況。如果這一功能得到廣泛使用並且反饋積極,我們或許可以期待 Node.js 進一步深化與 TypeScript 的整合。

結論與夏木樂的想法

Node.js 引入實驗性 TypeScript 支援,無疑是一個令人興奮的發展。它既反映了 TypeScript 在業界的重要地位,也展示了 Node.js 團隊對於社群需求的敏銳反應。雖然這一功能目前仍有許多限制,但它為開發者提供了更多的選擇和靈活性,並有可能在未來成為 Node.js 的重要組成部分。

而夏木樂自 2016 年開始就已經大量使用 TypeScript, 2023 年全公司新專案已經 100% 導入 TypeScript 了,對於這件事是樂觀其成的。當然 TypeScript 要完全成為主流語言還是有很長一段路要走,畢竟原生的 V8 引擎依然只支援 JS。

最後這一變革是否能夠獲得成功,取決於未來社群的接受度和 Node.js 團隊的持續改進。但毫無疑問,這項決定為 JS 整體社群與開發者們帶來了新的前景與挑戰,讓我們看下去。

相關文章