Deno是一種新型的構建在Google V8引擎之上的TypeScript安全運行時,最近已經發布到了0.1.8版本。前端
這個運行時是爲了解決NodeJS帶來的一系列問題:python
再也不有package.json,再也不有常常變化的依賴;git
取而代之的是,保存文件到你的項目中,或者經過http資源下載他們,以後他們即可以永久地被緩存下來;github
同時,再也不採用GYP(Generate Your Projects,是一個Google開源的構建系統,最開始用於Chromium項目,下載一些其餘的開源項目也開始使用GYP,如V八、Node.js、WebRTC等),替代他的是GN(GN是一個生成Ninja構建文件的元構建系統,以即可以用Ninja構建Chromium,GN文件比GYP文件更具可讀性和可維護性,GN比GYP快20倍);json
經過flatbuffers(FlatBuffers是一個開源的、跨平臺的、高效的、提供了C++/Java接口的序列化工具庫)消息傳遞取代直接調用系統方法;數組
此外還帶有開箱即用的TypeScript語法支持,再也不須要Babel之類的工具將TypeScript編譯成JavaScript。緩存
本文不會告訴你Deno究竟有多強大,僅是一篇快速入門的教程讓你瞭解這個新運行時,做者後續也會關注Deno的發展動向,若是有新收穫也會同步給你們。安全
安裝bash
二進制文件能夠從Deno的GitHub倉庫獲取,你能夠閱讀倉庫的Readme文件,本身嘗試去編譯它。編譯的過程十分佔系統資源,所以確保你的機器RAM至少在4GB以上,而且是SSD硬盤,不然你將花費大量的時間等待編譯的完成。微信
咱們就經過Python的方式下載安裝deno吧,畢竟mac上默認安裝有Python。
curl -sSf https://raw.githubusercontent.com/denoland/deno_install/master/install.py | python
而後將Deno將入到環境變量中
echo export PATH="/Users/cuitianze/.deno/bin":\$PATH >> $HOME/.bash_profile
OK,大功告成!
運行腳本
在Deno中,你既能夠運行JavaScript文件,也能夠運行TypeScript文件。經過Deno命令將文件名做爲參數運行你的代碼。你能夠在倉庫的tests文件夾中看到大量的Deno腳本示例。
控制檯輸出
和其餘任何語言或者框架同樣,你能夠作的第一件事就是在控制檯裏輸出一個消息。你能夠簡單地寫以下代碼打印出「Hello World!」。
console.log("Hello World!")
文件系統訪問
Deno提供了基礎的文件系統同步訪問的能力,如readFileSync和writeFileSync函數。
首先建立一個包含「黑馬大前端」字符串的文件,
echo 黑馬大前端 >> hi.txt
而後經過如下的代碼來讀取這個文件,建立hi.ts:
import { readFileSync } from "deno";
const data = readFileSync("hi.txt");
console.log(data);複製代碼
咱們看看會打印出什麼?
咱們經過readFileSync打印出了無符號8位整型數組形式的數據。若是咱們想將它轉換成字符串形式,須要使用「TextDecoder」,如下代碼會生成正確的輸出:
import { readFileSync } from "deno";
const decoder = new TextDecoder("utf-8");
const data = readFileSync("hello.txt");
console.log(decoder.decode(data));複製代碼
Perfect!「黑馬大前端」被成功地打印出來了。
文件寫入
既然咱們已經讀取而且解碼了一個文本文件,那麼接下來咱們要演示的就是寫入一個文件。咱們經過writeFileSync函數來實現。這個函數須要傳遞兩個參數,一個是文件路徑,一個是待寫入的內容。咱們建立hello.ts寫入以下代碼:
import { writeFileSync } from "deno";
const encoder = new TextEncoder("utf-8");
const data = encoder.encode("你好,黑馬大前端");
writeFileSync("hello.txt", data);複製代碼
然而,事與願違,文件寫入並不像文件讀取那樣輕鬆。
這是由於Deno默認禁止寫的權限,須要特別受權文件寫的權限以讓writeFileSync生效。
deno --allow-write hello.ts
Cool!成功寫入文件了。
咱們在實際項目中,應該是對第三方引入的文件存在不信任,此時應該有更細粒度的文件訪問和網絡訪問的權限控制,我也向Deno的核心成員提出了個人疑慮,值得慶幸的是,更細粒度的權限控制已經在規劃中了。
文件信息讀取
import { statSync } from "deno";
const fileInfo = deno.statSync("hi.txt");
console.log(fileInfo.isFile());
console.log(fileInfo.isSymlink());
console.log(fileInfo.isDirectory());
console.log(fileInfo.len); // File Size
console.log(fileInfo.modified); // Last modification date
console.log(fileInfo.accessed); // Last access date
console.log(fileInfo.created); // Creation date複製代碼
獲得的文件信息以下:
定時器
定時器支持setTimeout, clearTimeout, setInterval和clearInterval,
正如JavaScript的用法同樣,這裏就不詳細概述了。setTimeout(function() {
console.log("---黑馬來了---");},
3000);複製代碼
本身跑一遍就有感知了,運行結果以下:
還有一個Feature不得不提,deno能夠直接運行網絡文件。
贊👍期待Deno發展得愈來愈好。
本文做者:黑馬大前端 崔天澤
微信掃一掃關注「黑馬大前端」公衆號