Deno初識

  Deno的出現,也讓很多人調侃“論四個字母有多少種組合方式”。deno 這個名字就是來自 Node 的字母重新組合(Node = no + de),表示"拆除 Node.js"(de = destroy, no = Node.js)。

什麼是Deno?

  • Deno的創作者是Node.js之父Rean Dahl(瑞安·達爾)
  • Deno是一個基於V8引擎的簡單、現代的JavaScript和Typescript安全運行環境。
  • 採用Rust語言編寫而成(最初用的是Golang)
No package.json, no npm. Not explicitly compatible with Node.     ————Rean Dahl

下面的截圖是Deno目前的star History趨勢圖:
在這裏插入圖片描述
我們可以在Magi網站上搜索對比一下Deno和node的知識體系:
最先是Deno的:
在這裏插入圖片描述

然後是node的:
在這裏插入圖片描述

爲什麼說Deno是node.js的替代品?

有人說Node.js 社區是一片墓地,遍佈無人維護的庫。
首先來看看node的不足:

  • Node.js 對ES6新語法的支持不夠理想。ES6 標準引入了大量新的語法特性。影響最大的語法有兩個:Promise 接口(以及 async 函數)和 ES 模塊。Node.js 必須支持回調函(callback),導致異步接口會有 Promise 和回調函數兩種寫法;Node.js 自己的模塊格式 CommonJS 與 ES 模塊不兼容,導致遲遲無法完全支持 ES 模塊。
  • Node.js 的模塊管理工具 npm,邏輯越來越複雜;模塊安裝目錄 npm_modules 極其龐雜,難以管理。Node.js 也幾乎沒有安全措施,用戶下載了外部模塊,就進行各種讀寫操作。
  • Node.js 的功能也不完整,外部工具層出不窮,讓開發者疲勞不堪:webpack,babel,typescript、eslint、prettier…

再來看看Deno:

  • 使用Typescript或者javascript,可以直接創建對應的js或者ts擴展名的文件,在裏面寫入對應的代碼。
  • 安全控制(權限管理),默認情況下不具有讀寫權限,否則會出現報錯。獲取權限需要加入代碼–allow -XXX
  --allow-env :允許訪問環境變量;

  --allow-hrtime :允許高分辨率時間測量;

  --allow-net= :允許網絡訪問;

  --allow-plugin :允許加載插件;

  --allow-read= :允許文件系統讀取權限;

  --allow-run :允許運行子進程;

  --allow-write= :允許文件系統寫入訪問;

  --allow-all :允許所有權限(與-A相同)。
  (其中,net、read 和 write 的權限可以是細化的。例如,你可以使用 --allow-read=/dev,允許從特定文件夾中讀取。)
  • 去中心化(Package)
1) 沒有npm packages/package.json(express框架的時候需要npm來安裝一些依賴 -> node moudles中會有成百上千的一些依賴文件)
2) Packages通過URL來統一加載——http://deno.land/x/需要加載的軟件包或者庫的名稱
3) 加載引用時緩存到硬盤
import{Application} from "http://deno.land/x/oak/mod.ts"
  • 標準庫(fs,datetime,http,log…)
import{server}from “http://deno.land/std/http/server.ts”
archive :tar 文件歸檔的實用程序

async :異步工具

bytes :幫助器來操作字節切片

datetime :日期 / 時間解析

encoding :各種格式的編碼/解碼

flags :解析命令行標誌

fmt :格式化和打印

fs :文件系統 API

hash :加密庫

http :HTTP 服務器

io :I/O 庫

log :日誌實用程序

mime :支持多類型數據

node :Node.js 兼容層

path :路徑操縱

ws :WebSockets
  • Modern Js,擁有更具現代化的js特徵。node.js是09年推出的,從那以後js進行了大量的更新與改進,相對於node而言有更多的更現代化的JavaScript的優勢。

  • ES Modules,Deno支持es6的模塊,node.js自己的commen.js模塊與es模塊不兼容。

  • 頂級Await,Deno可以對await的等級進行提升(Top Level Await)。通常我們在使用await的時候,需要和異步進行捆綁。例如標記一個函數爲異步的時候,要設置裏面的一些值爲await來進行等待。Deno中可以在全局的範圍內使用await而不用將其包裹在異步函數裏面。

  • 內置測試

  • 瀏覽器兼容API,例如通過提供內置對象 fetch 和全局 window 對象

怎麼使用Deno呢?

首先是安裝,按照官網來就好:
我使用的是homebrew安裝。

在這裏插入圖片描述安裝完成進入deno的環境:(>這樣一個小尖角號就代表進入deno的環境啦)

在這裏插入圖片描述Deno可以直接運行js:

在這裏插入圖片描述輸入deno -help獲取deno的環境變量和它的一些子命令:

在這裏插入圖片描述
deno的命令:

bundle :將項目的模塊和依賴項捆綁到單個文件中

cache :緩存依賴項

completions :generate shell completions

doc :顯示某模塊的文檔

eval :運行一段代碼,例如 deno eval "console.log(1 + 2)

fmt :內置的代碼格式化程序(類似於 Go 語言中的 gofmt)

help :打印某消息或某給定子命令的幫助信息

info :顯示有關緩存的信息或與源文件有關的信息

install :將腳本安裝爲可執行文件

repl :開啓 REPL 環境(默認子命令)

run :運行給定文件名或 URL 的程序

test :運行測試

types :打印運行時的 TypeScript 聲明

upgrade :升級 Deno 到最新版本
當然,我們可以運行deno help以獲取該子命令的特定文檔,例如deno run --help。

寫到最後了,我一直在思考幾個問題:在現有的項目中引入Deno需要做些什麼?例如Deno和vue結合的話怎麼使用?替換現有的項目需要哪幾步?遷移代價是什麼?不過我現在也沒有很明確的答案,還需要再深入學習一下,到時候再來更新一波~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章