mac上面的deno環境搭建

最近被deno頻繁刷屏,issue的是是否否每個人自有一套看法。蹭個熱點,寫篇博客。這篇文章主要是對面向前端開發人員,對node有一些了解,想要繼續學習deno的一個參考。

什么是deno?

項目傳送帶
deno是ry大神(node.js主要作者)的最新作品,目前還在孵化中。實現的目標是A secure TypeScript runtime on V8。底層依舊是v8,專為TypeScript提供,目前不兼容node。

簡單翻譯一下官網的介紹:

A secure TypeScript runtime on V8
基于V8的TypeScript安全運行環境

  • Supports TypeScript 2.8 out of the box. Uses V8 6.8.275.3. That is, it's very modern JavaScript.
    使用V8版本6.8.275.3,支持TypeScript(一個現代的JavaScript語言)2.8開箱急用。

  • No package.json, no npm. Not explicitly compatible with Node.
    沒有package.json,沒有npm。和Node沒有明確的兼容關系。

  • Imports reference source code URLs only.
    僅通過url的方式導入依賴的源碼。

    import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
    import { log } from "./util.ts"
    
    

    Remote code is fetched and cached on first execution, and never updated until the code is run with the --reload flag. (So this will still work on an airplane. See ~/.deno/src for details on the cache.)
    通過url導入的代碼會在本地~/.deno/src下面有緩存,如果需要重新獲取,使用參數--reload

  • File system and network access can be controlled in order to run sandboxed code. Defaults to read-only file system access and no network access. Access between V8 (unprivileged) and Golang (privileged) is only done via serialized messages defined in this protobuf, this makes it easy to audit. To enable write access explicitly use --allow-write and --allow-net for network access.
    文件訪問和網絡訪問被控制在沙盒里面。默認只有可讀的文件系統操作權限,沒有網絡操作權限,通過--allow-write--allow-net可以開啟權限。在V8和Golang之間的相互交互只能通過序列化數據格式protobuf,這樣會更加便于審查。

  • Single executable:
    單文件執行(可將多個依賴打包為一個可執行文件)

     > ls -lh deno
     -rwxrwxr-x 1 ryan ryan 55M May 28 23:46 deno
     > ldd deno
        linux-vdso.so.1 =>  (0x00007ffc6797a000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f104fa47000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f104f6c5000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f104f3bc000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f104f1a6000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f104eddc000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f104fc64000)
    
    
  • Always dies on uncaught errors.
    未捕獲異常會使程序中斷。

  • Supports top-level await.
    語言層面支持await操作。

  • Aims to be browser compatible.
    瀏覽器兼容。

  • Can be used as a library to easily build your own JavaScript
    runtime. https://github.com/ry/deno/blob/master/cmd/main.go
    可作為依賴庫構建自己的JavaScript運行時。

可能需要提前了解的概念

  • Golang。俗稱go,deno的(主要)開發語言。特點是提供協程,在語言底層支持并發。
  • protobuf。google開源的數據交換格式。特點是快,使用便捷。
  • V8。js執行引擎。編deno需要編V8。

環境準備

基于mac的環境搭建。如果使用Linux和windows應該會有一些不同

brew install protobuf
go get -u github.com/golang/protobuf/protoc-gen-go
go get -u github.com/jteeuwen/go-bindata/...

代碼編譯

  • v8worker2。ry另一個開源的項目,鏈接golang和v8的中間件。
go get -u github.com/ry/v8worker2
image.png

image.png

這里使用了depot_tools 和 v8,是通過submodule方式管理的。
執行一下命令,獲取子模塊:

git submodule update --init

下載完成之后,執行編譯腳本:

./build.py

我在這一步是通過下載depot_tools和v8源碼然后在本地編譯的,需要翻墻才可以。是因為自己開始對git 子模塊管理不太了解,還要不斷學習啊。

  • deno
    終于到了deno這一塊了。
    下載deno代碼到本地
go get -u github.com/ry/deno/...

編譯代碼:

cd $GOPATH/src/github.com/ry/deno
make

測試是否成功:

./deno testdata/001_hello.js # Output: Hello World

image.png

顯示Hello World就成功了

水平有限,如有疑問,歡迎指教~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容