學得動的Deno

學得動的Deno

原創: 崔天澤 黑馬大前端

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函數。

readFileSync以文件的路徑做爲參數(能夠是相對於當前工做目錄的相對路徑,也能夠是絕對路徑),調用後會返回文件內容。

首先建立一個包含「黑馬大前端」字符串的文件,

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的核心成員提出了個人疑慮,值得慶幸的是,更細粒度的權限控制已經在規劃中了。


文件信息讀取

statSync函數會返回一個文件的信息。

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發展得愈來愈好。


本文做者:黑馬大前端 崔天澤

微信掃一掃關注「黑馬大前端」公衆號

相關文章
相關標籤/搜索