Deno 2.0的開發已接近完成,進入候選版本的階段。在Deno 2.0版本中,將有兩大重要變更,第一是全域變數的改變,第二則是相依性管理的更新。當初Deno的出現,以改進Node.js的不足為主打,但是從這次全域變數的政策調整來看,Deno似乎從過去試圖走出獨特路線,轉向更務實的妥協,逐漸回歸與Node.js更相近的設計。
在Deno 2.0中,全域變數有兩項重大變更,第一是移除window全域變數,第二則是引入Node.js的process全域變數。Deno從1.0版本就引入window全域變數,目的是希望Deno能夠盡可能和瀏覽器相容,但是沒想到window卻成為許多開發者的問題來源。window是瀏覽器環境中的全域物件,代表瀏覽器的全域範圍,因此當前端JavaScript程式碼在瀏覽器中執行時,window可以正常運作,但是於伺服器端環境卻不適用。
Deno是一個伺服器端的JavaScript執行環境,因此Deno中的window全域變數,常讓開發者誤以為在操作瀏覽器環境,window包含大量在瀏覽器中才具意義的API,因此當開發者不小心在Deno中使用,則會引發錯誤。有鑑於此,Deno 1.40開始便建議開發者不要使用window,改用globalThis或是self,而在Deno 2.0則會移除window全域變數。globalThis是ECMAScript標準中的統一全域物件,因此可在瀏覽器、Node.js和Deno中使用。
Deno 2.0的另一項全域變數改變,是引入Node.js重要全域物件process。process提供存取系統資訊、環境變數、命令列參數等功能。原本在Deno中的設計,要求開發者使用process必須顯式匯入node:process,但對於仰賴process作為全域變數的Node.js程式和框架來說,這項要求帶來額外的負擔。
現在Deno為了相容性需求,讓更多應用程式可以輕鬆無縫移植到Deno,因此在Deno 2.0中引入process全域變數。不過官方仍建議開發者盡量使用顯式匯入方法,因此也添加一條新的lint規則,在編輯器中提示並且協助開發者快速進行修正。
Deno 2.0相依項目管理方面,新增了jsr:和npm:前綴以區分不同來源的套件,避免名稱衝突。另外,Deno支援子路徑規範,解決過去無法解析包含/子路徑的問題。deno add與deno remove子命令的加入,簡化了相依項目的添加和移除過程。而且當專案包含package.json,Deno則會優先將NPM相依項目新增到該檔案,支援開發和生產相依項目分離管理。
熱門新聞
2024-11-10
2024-11-10
2024-11-11
2024-11-12
2024-11-11
2024-11-11