好程序員前端分享什麼是Deno,它與Node.js的區別,Node.js的建立者Ryan Dahl花了一年半的時間研究deno,這是一個新的JavaScript運行時,能夠解決Node的全部固有問題。
不要誤解個人意思,Nodejs它自己就是一個很棒的服務器端JavaScript運行時,主要是由於它擁有很大的生態系統和JavaScript。然而,Node.js的建立者Ryan Dahl認可他應該考慮更多的-安全性,模塊和依賴性,僅舉幾例。
在他的辯護中,並非說他能夠想象平臺在如此短的時間內會增加多少。此外,早在2009年,JavaScript仍然是這種奇怪的小語言,每一個人都取笑,並且它的許多功能尚未。
那麼什麼是Deno,主要特性有什麼呢?
1.Deno是一個基於V8構建的安全的TypeScript的Google運行時引擎。
它創建了:
Rust(Deno的核心是用Rust編寫的,node用C++編寫的)
Tokio(以Rust編寫的事件循環)
TypeScript(Deno支持開箱即用的JavaScript和typeScript)
V8(谷歌在Chrome和node中使用的JavaScript進行時)
2. 它支持Type2.8開箱即用,沒有package.json,沒有npm 不追求兼容Node,經過URL方式引入依賴而非經過本地模塊,而且在第一次運行的時候進行加載和緩存,並僅在代碼使用運行,依賴纔會更新。
能夠控制文件系統和網絡訪問權限以運行沙盒代碼,默認訪問只讀文件系統可訪問,無網絡權限。V8 和 Golang 之間的訪問只能經過 protobuf 中定義的序列化消息完成;
最終建立單一可執行文件;
支持 top-level 的 await;
最終的目標是兼容瀏覽器;
能夠做爲庫引入,用於創建本身的 JavaScript runtime。
這幾個特性,有不少個都是針對目前 NodeJs 的痛點而來的,包括無 package.json、依賴的引入和更新方式,針對的就是被普遍吐槽的過大的。
同時,再也不追求兼容 node,能夠視爲 ry 想完全拋棄 node 包袱,打造一個更好的 JS 運行時。前端
它的安全性也是很放心的,它最重要的功能之一就是安全性很高,與NodeJs相反,Deno默認執行沙箱中代碼,這就意味運行是無權訪問。 咱們來看看它的工做原理:
(async () => {node
const encoder = new TextEncoder(); const data = encoder.encode('Hello world'); await Deno.writeFile('HelloWorld.txt', data); await Deno.writeFile(' HelloWorld2.txt', data);
})();
該腳本建立了兩個文本文件,其中包含一條消息。代碼正在沙箱中執行,所以它沒法訪問文件系統。HelloWorld.txt HelloWorld2.txt Hello world
另請注意,咱們正在使用Deno命名空間而不是fs模塊,就像在Node中同樣。Deno命名空間提供了許多基本的輔助函數。經過使用命名空間,咱們正在失去瀏覽器兼容性。
固然咱們用到Deno的時候,會想到瀏覽器的兼容性,Deno旨在瀏覽器兼容。從技術上講,在使用ES模塊時,咱們沒必要使用任何構建工具(如webpack)來使咱們的應用程序啊能夠在瀏覽器中使用。
可是像Babel這樣的工具會將代碼轉換成ES5版本的JavaScript,所以 即便在不支持該語言所用最新功能的舊版瀏覽器中,代碼也能夠運行。但這也是最終文件中包含大量沒必要要的代碼並使輸出文件膨脹爲代價的。
由咱們決定咱們的主要目標是什麼,並相應地作出選擇。
TypeScript支持開箱即用
Deno使得無需任何配置文件便可輕鬆使用TypeScript。仍然能夠用純JavaScript編寫程序並使用Deno執行它們而不會有任何麻煩。
Deno是TypeScript和JavaScript的新運行時,是一個有趣的項目,如今已經穩定增加了很長一段時間。可是在它被認爲是生產就緒以前還有很長的路要走。
藉助它的分散式方法,它須要從集中式軟件包註冊表(即npm)中釋放JavaScript生態系統。webpack