但願你們不要被標題嚇到,純屬爲了吸引眼球😢。。根據筆者這兩天的學習感覺,Deno 比 Node 更容易入門,若是你有 Node 的基礎那更簡單了,不少東西都是能夠類比的,學起來豪不費力。我的認爲如今正是入門 Deno 的最好時機,隨着 v1.0 的發佈 Deno 的 API 已趨於穩定,但整個生態圈的繁榮纔剛剛開始,因此趁 Deno 仍是個寶寶咱們能夠陪它一塊兒成長。前端
Deno是新一代的 JavaScript 和 TypeScript 運行時(runtime),使用 Rust 和 tokio 實現,和 Node 同樣內部也使用 V8 引擎,並且Deno 和 Node 的做者是同一我的:Ryan Dahl。他創造Deno的初衷是爲了彌補 Node 的某些設計缺陷,但鑑於目前 Node 的生態已經如此繁榮,Deno 暫時還沒法徹底取代 Node,Node 應該還將長期穩定存在。node
Deno的主要特色有:git
Deno目前還處於早期發展階段,因此一些功能和API可能還會有變更,同時生態也不完善,社區提供的工具或多或少會有bug,可是這些都是正常的,並不妨礙咱們去提早學習和了解這個更優秀的 Node.js 替代品。github
Shell (Mac, Linux) - 指定版本(推薦):web
curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.2.1
PowerShell (Windows) - 指定版本(推薦):npm
$v="1.2.1"; iwr https://deno.land/x/install/install.ps1 -useb | iex
Homebrew (Mac) :編程
brew install deno
Chocolatey (Windows) :json
choco install deno
注意:安裝完成後需根據命令行中的提示配置環境變量!
在命令行裏面輸入 deno
命令能夠進入編程模式:緩存
使用 deno --version
查看 Deno 的版本:安全
可使用 deno run <filename.js>
命令運行一個本地 js 文件。
或者,一個 ts 文件:
第一次運行 ts 文件會進行編譯,第二次就不用編譯了,除非 ts 文件有修改。
Deno 也能夠運行一個遠程的 ts 文件:
上圖文件路徑: http://lc-3Cv4Lgro.cn-n1.lcfi...
能夠看到,deno會先下載遠程ts文件,再編譯、運行。若是該遠程文件已經被下載編譯過了,再次運行就會從緩存中讀取:
若是想從新下載、編譯則可使用 -r
或 --reload
參數,進行從新加載:
Deno 的運行時由標準的 Web APIs + Deno global 這兩部分組成。
實現 Web APIs 主要是爲了遵循已有的 web 標準,提供你們都熟悉的接口,以下降學習和使用成本,也讓咱們前端同窗更容易上手,好比常見的 console
、 fetch
、 setTimeout
等方法在Deno中仍能夠正常使用。Web APIs 的做用域爲全局,便可以直接使用或者經過 window.***
、 globalThis.***
調用。Deno 實現的全部 Web APIs 可參考 Github Repo 。
除了 Web APIs,Deno 自有的 API 都放在 Deno
這個命名空間下,好比文件操做、網絡鏈接、進程管理等。
接下來以 fetch API
爲例展現 Deno中 Web APIs 的使用。
好比獲取一個遠程資源:
fetch.ts:
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1'); const data = await res.json(); console.log(data);
若是使用VSCode進行開發,推薦安裝 Deno 插件。
運行:
deno run --allow-net fetch.ts
注意:進行網絡訪問須要單獨受權,使用
--allow-net
flag。
結果:
咱們也能夠給 --allow-net
指定可訪問的域名,則訪問未指定的域名就會報錯。好比,將上面的命令改成:
deno run --allow-net=github.com fetch.ts
結果將獲取不到指定資源:
和 Node 同樣,Deno 也能操做文件系統,接下來咱們以此爲例展現 Deno global API 的使用。
好比,讀取一個txt文件:
doc.txt
This is my first deno app.
read.ts
const decoder = new TextDecoder('utf-8'); const data = await Deno.readFile('doc.txt'); console.log(decoder.decode(data));
和 Node 不一樣,Deno 默認是沒有操做文件權限的,若是使用 deno run read.ts
運行就會報錯:
由於咱們須要手動賦予讀取文件的權限,使用 --allow-read
flag:
與讀文件對應的,寫文件的操做以下:
write.ts:
const encoder = new TextEncoder(); const txt = 'Deno is awesome!'; await Deno.writeFile('doc.txt', encoder.encode(txt));
一樣的,咱們須要手動賦予寫文件的權限:
deno run --allow-write write.ts
rename.ts:
await Deno.rename('doc.txt','readme.txt');
重命名文件須要同時賦予讀和寫的權限:
deno run --allow-read --allow-write rename.ts
delete.ts:
await Deno.remove('doc.txt');
刪除文件須要寫的權限:
deno run --allow-write delete.ts
除了 Web APIs 和 Deno global,Deno官方團隊還提供了一個標準庫,即一組高質量的工具集。這個標準庫不包含任何第三方依賴,並且代碼都會由Deno核心團隊審查,所以能保證高質量和穩定性。
標準庫地址: https://deno.land/std
接下來,咱們以幾個經常使用的模塊爲例展現標準庫的用法。
標準庫中的 fs 至關於對 Deno 自帶文件操做的擴展,好比增長了對JSON文件的讀寫:
fs.ts:
import { readJson } from 'https://deno.land/std@0.62.0/fs/mod.ts'; const posts = await readJson('./posts.json'); console.log(posts);
標準庫的版本Deno的版本暫時不統一,使用標準庫時應該指定穩定的版本號,如本例中的
0.62.0
,以免意外的更新和重大更改致使程序不可用。
運行:
deno run --allow-read --unstable fs.ts
由於涉及到一些不穩定API的調用,因此要加上
--unstable
flag 以啓用這些API
結果:
fs模塊地址: https://deno.land/std/fs
和 Node 相似,Deno 的 http 模塊也能用於建立一個 web 服務器:
http.ts:
import { serve } from 'https://deno.land/std@0.62.0/http/mod.ts'; const server = serve({ port: 3000 }); console.log('listening on port 3000'); for await (const req of server) { req.respond({ body: `<h1>Hello, Deno!</h1>` }); }
運行:
deno run --allow-net http.ts
結果:
http模塊地址: https://deno.land/std/http
uuid 的做用是生成一個128位的全局惟一的ID。
uuid.ts:
import { v4 } from "https://deno.land/std@0.62.0/uuid/mod.ts"; const myUUID = v4.generate(); console.log(myUUID);
運行:
deno run uuid.ts
結果:
uuid模塊地址: https://deno.land/std/uuid
雖然誕生不久但勤勞的同行們已經爲Deno生態作出了很多貢獻,現有的第三方模塊在 這裏 能夠找到。
下面列舉幾個比較有用的模塊:
還有一些本來的 npm 包在 Deno 裏面仍是能夠用的,好比:lodash
好了,今天的Deno入門就給你們介紹到這裏,若是對你有幫助的話給個贊和關注吧 😊。
本文Demo地址:https://github.com/MudOnTire/...