Deno 初探

来源:https://www.cnblogs.com/champyin/archive/2020/06/14/13126351.html
-Advertisement-
Play Games

Deno 是什麼?什麼是 Javascript runtime?Deno 會取代 Node.js 嗎? ...


前言

Deno 已經被前端圈子提及有很長一段時間了,上個月 Deno 發佈了 1.0 版本,又掀起了一小股 Deno 熱。Deno 到底是什麼?它可以用來做什麼呢?它好用嗎?帶著一直以來的好奇心,趁著周末的時間,認真地接觸了一次 Deno。

一、什麼是Deno?

Deno 是一個更安全的 JavaScript 和 TypeScript 運行時,作者 Ryan Dahl 同時也是 Node.js 的創建者。

什麼是運行時?

運行時是一個運行環境,也叫運行平臺,開發者可以使用指定的語言,基於這個環境開發應用。可以認為運行時就是一個舞臺,能做什麼事情,取決於舞臺能提供什麼道具。比如瀏覽器就是一個運行時,我們可以在瀏覽器上通過 JS 調用瀏覽器提供的 API 操作 DOM。

Deno 的作用

Deno 的作用,是讓開發者可以使用 JavaScript 語言開發後端服務。

二、為什麼會有Deno?

我們知道 Node.js 也是一個讓開發者可以使用 JavaScript 語言開發後端服務的 JavaScript 運行時。那既然已經有一個 Node.js,而且已經非常成功,為什麼還要造另一個 JavaScript 運行時 Deno ?

兩年前(2018年6月),Ryan Dahl 在德國柏林召開的 JSConf EU 會議上發表了名為 “10 Things I Regret About Node.js” 的演講,有興趣可以到這裡下載 PPT

Ryan Dahl

在分享中,Ryan 回顧了在他看來當初開發 Node.js 時留下的10大遺憾。但由於Node.js 現在已經廣泛應用於各個領域,為了保證相容性,對 Node.js 底層進行大規模改造已經不現實。會上,Ryan 宣佈了他決定開發一個全新的 JavaScript Runtime 以解決當初的種種缺陷,這個項目就是 Deno。

Deno logo

Deno 的命名很有意思,就是把 node(no de) 倒過來 deno(de no),頗有顛覆 Node 的意味。

BTW,上個月(2020年5月15日),Deno 發佈了1.0版本。

三、走近 Deno

Deno 的開發語言

相比 Node.js 使用 C++ 開發,Deno 起初使用的開發語言是 GoLang,後來改為了 Rust。並且隨後把 C++ 寫的 libdeno 換成了 Rust 編寫的 V8 綁定:denoland/rusty_8。

Deno 目前是建立在 V8 引擎、Rust 、Tokio、TypeScript 的基礎之上。

  • V8 是 chrome 瀏覽器內的 JavaScript 運行時。
  • Rust 是一門系統編程語言,專註於安全,尤其是併發安全。它的性能和標準C++ 不相上下。
  • Tokio 是一個給 Rust 語言使用的非同步運行時,提供 event loop 和具體的 I/O 類型。
  • TypeScript 是 JavaScript 的超集。

Deno 的特性

  • 預設支持 ES Modules
  • 預設支持 TypeScript
  • 儘可能相容 Web 標準 APIs
  • 預設採用沙箱模式運行代碼,更安全
  • 去中心化第三方模塊機制
  • 提供標準庫

與 Node.js 的比較

  • 使用 ES 模塊,不支持 require()
  • Deno 不使用 package.json
  • Deno 不使用 npm
  • Deno 中的所有非同步操作返回 promise,因此 Deno 提供與 Node 不同的 API
  • Deno 需要顯示指定文件、網路和環境許可權
  • 第三方模塊通過 URL 或者文件路徑導入
  • 當未捕獲的錯誤發生時,Deno 總是會異常退出
  • 相容 Web 的運行時 APIs,更利於前後端的代碼同構。

四、如何使用 Deno

Deno 能夠在 macOS、Linux 和 Windows 上運行。Deno 是一個單獨的可執行文件,它沒有額外的依賴。

1.安裝

在 macOS 下可以通過Shell命令安裝:

curl -fsSL https://deno.land/x/install/install.sh | sh

這個方式在國內安裝會很慢,慢到下不下來。。。so,不推薦。

也可以通過HomeBrew 安裝:

brew install deno

deno-install-brew

這個方式可以安裝下來,但是,安裝的版本是 v0.20.0,很低的版本:

deno-version-low.jpg

並且這個版本不帶 upgrade 命令,升級 deno 的時候很不方便。so,也不推薦。

安利通過國內加速器(鏡像源 https://x.deno.js.cn )來安裝:

curl -fsSL https://x.deno.js.cn/install.sh | sh

也可以指定版本:

curl -fsSL https://x.deno.js.cn/install.sh | sh -s v1.0.0 

deno-install-x.jpg

首次安裝,可以看到提示,需要手動配置一下環境變數,配置語句也已經給出:

$ touch ~/.bash_profile # 創建用戶環境變數文件
$ vim ~/.bash_profile # 打開文件,將剛纔命令行提示給出的配置語句粘貼進去,保存退出。

讓配置立即生效:

$ source ~/.bash_profile 

環境變數就設置好了,現在在任何一個新打開的命令行裡面都可以使用 deno 命令了。

註意:如果之前使用 brew 安裝過低版本的 deno,請使用 brew uninstall deno 卸載 deno 之後,再使用加速器安裝高版本,不卸載直接安裝高版本不會生效。(別問我為什麼知道。。。都是淚。

其他操作系統環境的安裝可參考 https://github.com/denoland/deno_install。

如果要升級本地的 Deno,可以運行

deno upgrade

還可以安裝指定的版本:

deno upgrade --version 1.1.0

這個命令會從 github.com/denoland/deno/releases 獲取最新的發佈版本(一個可執行的二進位文件 zip 壓縮包),然後解壓並替換現有的版本。而 github release 的文件使用的是 aws,在國內訪問不穩定。

So,升級也推薦使用國內加速器安裝指定版本來達到目的。

2.測試安裝

deno --version

deno-version-high.jpg

如果列印出 Deno 版本,說明安裝成功。

到這裡,我們就安裝好 Deno ,並且可以基於 Deno 進行開發了。

3.運行一個遠程的項目

跑一個遠程項目(官方的demo)

deno run https://deno.land/std/examples/welcome.ts

可以看到在控制台輸出"Welcome to Deno

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.連接redis # 匿名訪問 redis-cli -h ip_address -p port # 密碼訪問 redis-cli -h ip_address -p port -a password 2.利用keys模糊查詢,查詢 key 的完整名稱 # 以 aaa 結尾的 key keys *aa ...
  • redis 的散列可以讓用戶將多個鍵值對存儲到一個 redis 鍵裡面。這裡介紹一些常用命令,以及在 Yii 中的使用。 HMGET HMGET:HMGET key-name key [key …]從散列裡面獲取一個或多個鍵的值。 HMSET HMSET:HMSET key-name key nam ...
  • 一.源碼下載: Windows中的Redis源碼下載:https://github.com/microsoftarchive/redis/tree/3.2 根據官網說明可知,用VS2013編譯,但是必須更新到update5, 否則會出現各種編譯錯誤,確實如此,之前用vs2013的其它版本,出現各種錯 ...
  • Kakfa在大數據消息引擎領域,絕對是沒有爭議的國民老公。 這是kafka系列的第一篇文章。預計共出20篇系列文章,全部原創,從0到1,跟你一起死磕kafka。 本文盤點了 Kafka 的各種術語並且進行解讀,術語可能比較枯燥,但真的是精髓中的精髓! 瞭解Kafka之前我們必須先掌握它的相關概念和術 ...
  • redis 的集合是無序的,集合成員是唯一的,不能重覆。用戶可以快速地對集合執行添加元素操作、移除元素操作以及檢查一個元素是否存在於集合中。這裡介紹一些常用的集合處理命令,併在 Yii 中的使用。 SADD SADD:SADD key-name item [item …]將一個或多個元素添加到集合里 ...
  • Dart語言一些語法特點和編程規範. 本文適合: 日常使用Kotlin, 突然想寫個Flutter程式的Android程式員. ...
  • 目錄:andorid jar/庫源碼解析 HotXposed: 作用: 免重啟手機,實現Xposed hook更新。(當然app是要重啟的) 慄子: 入口: // Hook 入口 public void handleLoadPackage(XC_LoadPackage.LoadPackagePara ...
  • Vuex源碼閱讀(二) store內的getters實現邏輯,介紹Vuex對getter進行了哪些處理。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...