Deno 2020 年大事記

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 改變了開發者對包管理的看法。或許是廣大開發者苦 npm 久矣,用法簡單且高效的 Deno 收穫了很多正向的反響。同時,Deno 也被評爲 2020 年最佳開源。本文將帶大家回顧一下 Deno 在過去的一年中都經歷了哪些更新。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨着 API 的穩定化改造、若干大型基礎架構的重構,以及諸多備受關注功能的開放,Deno 1.0 版本正式發佈。2020 年,Deno 迎來了衆多的挑戰和變化。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"1 月:再見 libdeno,你好 rusty_v8"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"libdeno 是一個 C++ 庫,它可以更好地橋接 Deno 中的 V8 引擎和 Rust 代碼,但缺點就是 libdeno 很難理解,也很難在其上開發更多額外的功能。基於這種情況,rusty_v8 應運而生。rusty_v8 發佈於 2019 年秋季,是一個爲 V8 引擎提供 API 的 Rust crate,同年 12 月,rusty_v8 就已經具備所有替換 libdeno 必需的 binding 條件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2019 年底,替換 libdeno 的工作正式開始,當時 Deno 團隊先用 rusty_v8 重寫了一部分 libdeno,Deno 代碼庫中測試覆蓋率不斷提高,最終,libdeno 在 0.29.0 版本中被完全替換刪除,此後 rusty_v8 也經歷了綁定類型安全性相關的重要重構。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.28.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.28.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.29.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.30.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.31.0"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2 月:deno fmt 開始由 dprint 構建,deno test 子命令"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 2 月,Deno 團隊徹底重構了 deno fmt。此前,deno fmt 是一個簡單的子命令,只是最終指向 prettier 的“deno run”的一個別名。這意味着在首次運行 deno fmt 以及每次 prettier 升級後,用戶都必須下載 prettier 的最新版本。這和 Deno 承諾的內置工具開箱即用的原則很不契合。同時,prettier 真的很慢,而且存在很多性能方面的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 團隊採用了 David Sherret 的 dprint 庫,這是一個基於 Kang Dong Yun 的 SWC JavaScript 解析器、並由 Rust 編寫的代碼格式化工具。dprint 可以和 prettier 庫一樣的工作,但速度卻比後者快了很多。於是,在經過一些測算後,Deno 團隊決定在 deno fmt 中使用 dprint。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"deno test 在首次運行命令時,也需要從標準庫中下載模塊。這導致添加了新的 Deno.test() API,並且 deno test CLI 子命令也讓測試成爲了 Deno 的一等公民。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.32.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.33.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.34.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.35.0"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"3 月:V8 調試器、deno doc、deno upgrade"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 1.0 正式版發佈最大的阻礙就是缺少 Chrome Devtools 的支持。因此,Deno 團隊花了很多精力來增加對 V8 調試器的支持以及提高使用 Chrome Devtools 連接到 Deno 進程的能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在 3 月的更新中,CLI 中添加了兩個新的子命令:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"deno doc"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"deno upgrade"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3 月同時也是構建過程發生巨大改進的一個月。此前,Deno 中的每一次構建都會導致 V8 從源碼級別進行重新構建。衆所周知,V8 是一個龐大的 C++ 項目,每次構建至少要花費 30 餘分鐘,雖然有大量的緩存和很多的技巧,但「費時」一直是 Deno 團隊所面臨的難題。現在,Deno 團隊增加了 rusty_v8 的能力,使其在 GitHub 上生成和下載預構建過的靜態庫更加方便,從而使 Deno 的構建過程完全繞過 V8 的構建,這樣不僅能夠加快 CI 的構建,也能讓貢獻者可以更輕鬆地構建 Deno。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.36.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.37.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.37.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.38.0"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"4 月:破壞所有 API 以構造更穩定的 API"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4 月,Deno 團隊在爲 Deno 1.0 正式版發佈做準備,他們將重點放在審閱 Deno global 全局中的 API。這也導致了諸多破壞性更新。對此,Deno 團隊表示他們很謹慎,將所有不確定的 API 都移到了 --unstable 標誌之後。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 團隊也對此作出了 1.0 版本的重要承諾:在 Deno 2.0 版本發佈之前,已標記爲穩定的 Deno API 將不會做任何破壞性更新。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4 月是 Deno 版本以 0.x.y 命名的最後一月。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"4 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.39.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.40.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.41.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"0.42.0"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"5 月:Deno 1.0 正式發佈"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"5 月初,Deno 標記刪除了以下幾個功能:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"JSON imports"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"WASM imports"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"window.location API"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust API for deno crate"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 團隊表示,刪除的原因是因爲他們不想 JSON\/WASM imports 缺少底層規範支持,或者 deno crate 下有 Rust API 額外維護負擔的情況下提供相關 API。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Ryan 發表 Deno 演講的整整兩年後,Deno 1.0 正式於 2020 年 5 月 13 日發佈。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 一經發布,便收到了廣大開發者的歡迎,同時也收穫了大量的新用戶和新貢獻者。Deno 1.0 發佈後,Deno 團隊也沒有鬆懈,他們繼續開始回到了有關運行時重要組件的工作中:他們用 SWC 重寫了 TypeScript 宿主中的依賴關係分析,這一改動也標誌着 Deno 團隊開始着手使用 Rust 來重寫 TypeScript 基礎架構的一部分。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"5 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.0-rc1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.0-rc2"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.0-rc3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.2"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.3"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"6 月:增量類型檢查和 deno lint"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 1.0 發佈後,社區中反饋最多的問題之一就是 TypeScript 的編譯和類型檢查非常慢。於是,Deno 團隊開始着手改進 TSC 集成來支持增量類型檢查。經過多次反覆試驗的 PR,Deno 團隊使其功能能夠正常使用,並且顯著地改進了開發效率。儘管通過利用 TSC 的增量 API 設法提高了類型檢查的速度,但仍需要依靠它來 emit 已轉義的源。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 的偉大設計原則之一是它只是一個具有附加語法的 JavaScript,因此剝離類型信息(轉換爲 JavaScript)是相對容易的操作。於是,Deno 團隊設定了能夠在 Rust 中使用 SWC 進行轉移的同時還能繼續使用 TSC 進行類型檢查的目標。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除此之外,本月還加入了 deno lint。經過幾個月的開發,Deno 團隊在一個單獨的倉庫中添加了新的 deno lint 子命令。這是另一個建立在 SWC JavaScript 解析器上的項目。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"6 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.4"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.0.5"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.1.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.1.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.1.2"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"7 月:將內部運行時代碼從 TypeScript 轉換爲 JavaScript"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 7 月,Deno 團隊宣佈將內部運行時代碼從 TypeScript 轉換爲 JavaScript。主要有幾個因素:Deno 內部運行時代碼的每個構建過程中,類型檢查和快照前綁定等都是複雜且緩慢的構建步驟。Deno 有兩個獨立的 TypeScript 編譯器宿主,一個是隻用於構建過程的 deno_typescript crate,另一個則被包含在 Deno 的二進制文件中。此外,整個構建過程中將會產生 2 分鐘的增量重建。而使用 JavaScript,Deno 能極大地簡化內部構建依賴關係和總體複雜性,因爲 JavaScript 代碼是由 TypeScript 編譯器作爲單個文件包生成的,從而導致 Deno 團隊無法控制輸出代碼的類型。ES 模塊進行了轉換,變爲使用 bundle 的 SystemJS 加載程序,這爲最終 bundle 添加了大量的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzUxMzcxMzE5Ng==&mid=2247496779&idx=1&sn=dd9d629ee093506c8c0e837f571c7ca8&chksm=f9524108ce25c81e6bdc0fb7b2dd83b8be9bb5c198aef6dc62a33153f5014ddf739c4c8c022c&token=914418296&lang=zh_CN#rd","title":"","type":null},"content":[{"type":"text","text":"《Deno 將停止使用 TypeScript,並公佈五項具體理由》"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不過,Deno 將只在內部的 Deno 代碼中停用 TypeScript,而 Deno 用戶代碼中的 TypeScript 部分將依舊保留,檢查類型自然也會一同存在。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"7 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.1.3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.2.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.2.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.2.2"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"8 月:新的鏡像源網站發佈"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文章:"},{"type":"link","attrs":{"href":"https:\/\/deno.land\/posts\/registry2","title":"xxx","type":null},"content":[{"type":"text","text":"《Updates to deno.land\/x》"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 8 月 3 日,Deno 團隊發佈了全新的 deno.land\/x 鏡像源,可以通過 WebHooks 與 GitHub 集成。每當一個模塊被更新,Deno 的系統會下載並永久保存其源代碼,這樣就可以依賴不可變的源代碼鏈接。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於正在使用 Deno 基礎結構進行一些非公開工作,Deno 團隊開始努力將 Deno 系統分爲更小的“op crates”,以便可以生成定製的 V8 運行時。在 2020 年 8 月,Deno 團隊正式邁出了第一步,發佈了 deno_web crate,它提供了一些基本的 Web API,例如 Event、TextUncoder 和 TextDecoder。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同時,基準系統使用了 Rust 來重寫,這也意味着 Deno 團隊開始着手減少 Deno 項目的構建依賴性。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"8 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.2.3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.3.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.3.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.3.2"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"9 月:WebSocket API、控制檯中的 CSS 樣式、文件監聽和測試覆蓋"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 9 月,Deno 發佈了自 1.0 版本以來最大的功能版本。更多詳細信息可參見 1.4.0 版本的文檔:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/deno.land\/posts\/v1.4","title":"","type":null},"content":[{"type":"text","text":"https:\/\/deno.land\/posts\/v1.4"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,在維護方面也有一個重大變化:發佈計劃正式更改。新版本更新將從每月發佈一次改爲每六週發佈一次,以和 Rust 和 Chrome 項目相匹配。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"9 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.3.3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.2"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"10 月:REPL 改造、捆綁改進和默認 isolatedModules"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 10 月,Deno 1.5.0 正式發佈,文檔地址爲:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/deno.land\/posts\/v1.5","title":"","type":null},"content":[{"type":"text","text":"https:\/\/deno.land\/posts\/v1.5"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本月最大的變化是在 TypeScript 編譯器宿主中默認啓用 isolatedModules 選項。這一設置可以確保每個文件都可以由 TSC 以外的工具(例如 SWC 和 Babel)隔離編譯(不需要知道其類型或其他模塊)。這一變化對模塊生態系統產生了重大影響,一度使很多模塊無法使用,直至支持 isolatedModules。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本月還在 SWC 中採用了新的 bundle 特性,這是對原始 TypeScript 編譯器轉向使用 Rust 方向的又一步邁進。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"10 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.4"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.5"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.4.6"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.5.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.5.1"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"11 月:對 TSC 編譯器基礎架構的全面重寫"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 團隊的 Kitson Kelly 用了數週的時間重寫了編譯管道(compilation pipeline)的總結,同時也進一步提高了 TypeScript 的編譯速度,更重要的是還清了大量的技術債。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"添加了 deno_crypto op crate。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"11 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.5.2"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.5.3"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.5.4"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"12 月:構建自包含的二進制文件以及 deno lsp"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzUxMzcxMzE5Ng==&mid=2247504128&idx=1&sn=3a1cf14616d336c30f07f15976b97862&chksm=f9526443ce25ed55b09354a73c7dfb3dbad81b4399ed678c057db0c480afc3b132e4e426af7f&token=914418296&lang=zh_CN#rd","title":"","type":null},"content":[{"type":"text","text":"《Deno 1.6 正式發佈!支持將 TypeScript 編譯成單個可執行文件,蘋果 M1 可原生運行》"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020 年 12 月,Deno 1.6 正式發佈,其中包含了兩個里程碑式的特性:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"構建自包含的獨立二進制文件"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內置的 Deno 語言服務器"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Demo compile 是 Deno 的 bug 追蹤器中最受期待的特性之一。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過提供內置語言服務器,Deno 1.6 提高了所有能夠使用 LSP 協議的編輯器的開發體驗,它導致了對 vscode_deno 的第三次翻新,此項工作目前還在進行中。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"12 月版本更新"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.6.0"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.6.1"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.6.2"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.6.3"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"展望 2021"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"回顧整個 2020 年,Deno 的項目和社區都有很大的增長。2021 年,期待 Deno 會有更好的發展。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你有興趣成爲 Deno 的貢獻者,或是想了解 Deno 的進展,可以通過下方地址查看更多信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deno 問卷調查:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/forms.gle\/hbhP46LUAfVFMggU6","title":"","type":null},"content":[{"type":"text","text":"https:\/\/forms.gle\/hbhP46LUAfVFMggU6"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2021 年第一季度路線圖:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/denoland\/deno\/issues\/8824","title":"","type":null},"content":[{"type":"text","text":"https:\/\/github.com\/denoland\/deno\/issues\/8824"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過添加新的語言服務器功能來提高對 IDE 的支持:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/denoland\/deno\/issues\/8643","title":"","type":null},"content":[{"type":"text","text":"https:\/\/github.com\/denoland\/deno\/issues\/8643"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用 Web 平臺測試套件來確保對 Web 的兼容性:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/denoland\/deno\/issues\/9001","title":"","type":null},"content":[{"type":"text","text":"https:\/\/github.com\/denoland\/deno\/issues\/9001"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章