Deno 能吞掉 Node.js 嗎?
最近,Node.js的原作者Ryan Dahl發(fā)布了Deno1.0 , 有網(wǎng)友創(chuàng)建了上述漫畫,似乎Deno要吞噬整個Node.js社區(qū)了。
Deno是什么? 簡單來說,它一個支持JavaScript和TypeScript的安全平臺,有點像Node.js。
有了Node.js,可以讓JavaScript運行在服務(wù)器端,為什么還要搞一個Deno?
其實就兩個字:不爽!
Deno的作者,同時也是Node.js的作者Ryan Dahl想要一個有趣的、生產(chǎn)力強大的腳本語言平臺,但是現(xiàn)在的技術(shù)平臺滿足不了他。
他看Python不爽,Ruby不爽, 甚至自己寫的Node.js都看著不爽 !他還專門講過“Node.js設(shè)計的十大失誤”, 總是讓我想起努爾哈赤起兵s時寫的《七大恨》,不同的是努爾哈赤反的是明朝,而Ryan Dahl反的是自己。
他覺得Node.js有這么幾個大的槽點:
1. Node module設(shè)計得很爛,還是集中式的
2. 需要支持很多遺留的API
3. 安全問題
既然如此,那就另起爐灶,再搞一個吧,把這些缺陷給修正了。
Deno 有什么重要特點呢?
1. 安全控制
你寫的或者從別的地方導(dǎo)入的js/ts代碼,默認(rèn)不能直接訪問硬盤/網(wǎng)絡(luò)等資源了,需要在運行的時候給腳本授權(quán)。
比如下面整個命令就是授權(quán)app.ts可以訪問環(huán)境變量,可以訪問網(wǎng)絡(luò),可以讀取/temp目錄。
熟悉Java的同學(xué)立刻就會想到Java 的沙箱(Sand Box),程序是運行在沙箱中被控制的, 為什么要這么做呢?一個重要的原因是有很多第三方的代碼庫是從網(wǎng)絡(luò)下載的,這些代碼可能存在惡意破壞本地環(huán)境,偷取本地敏感信息的問題, 可見Deno把安全確實放到了比較重要的位置。
有趣的是Java 默認(rèn)是開啟訪問權(quán)限,想限制的話需要提供策略文件, 而Deno默認(rèn)是關(guān)閉訪問權(quán)限, 更狠!
但我有一個感覺,這個功能并不是那么的重要和急迫,大家想一下,你定制過Java的安全策略嗎?大部分時間都是默認(rèn)配置的吧?現(xiàn)在有了Docker這樣的容器來實現(xiàn)隔離,在應(yīng)用層面再來授權(quán),意義有多大呢?
2. 終于有標(biāo)準(zhǔn)庫了!
用慣Java同學(xué)可能沒啥感覺,因為一直在用JDK中的各種內(nèi)置的class。
但是JavaScript一直沒有標(biāo)準(zhǔn)庫,很多功能靠第三方代碼,會給人造成選擇困難癥。
現(xiàn)在Deno終于提供了一個標(biāo)準(zhǔn)庫,涵蓋了datetime, encoding,hash, http,log,testing等等,這將會極大地方便程序員。
不過,我瀏覽了一下標(biāo)準(zhǔn)庫代碼:https://deno.land/std, 都是用TypeScript編寫的。
3. 支持開箱即用的TypeScript
TypeScript是JavaScript的超集,支持靜態(tài)類型,現(xiàn)在已經(jīng)很流行了。
Deno對TypeScript支持得非常好, 你可以用TypeScript來寫程序,然后直接Deno run xxx.ts,Deno在內(nèi)部會編譯成JavaScript運行。
靜態(tài)類型還是香啊!可以想象,用了TypeScript的助陣。Deno可以支持大型的、有著復(fù)雜業(yè)務(wù)邏輯的應(yīng)用程序開發(fā),以后再也無人可以嘲笑“動態(tài)一時爽,重構(gòu)火葬場”了。
對于Java程序員來說, 建議關(guān)注一下TypeScript。
4. 干掉了集中化的代碼倉庫
Deno的包管理方式有了天翻地覆的變化, 拋棄了集中式的代碼倉庫, 代碼從Web端直接導(dǎo)入:
這是直接從Web上導(dǎo)入ECMAScript模塊, 看起來倒是挺清爽的。當(dāng)然導(dǎo)入的模塊會緩存到本地,下次可以直接訪問。
可是分布式的包管理真的有那么好嗎?想想在代碼中的那些從各個網(wǎng)站import語句,我是覺得有點兒不爽,Python有pip, Ruby有g(shù)em , Java 有maven,它們的背后都是集中式的倉庫,用起來挺香啊。
現(xiàn)在Deno提供了一個非常初級的搜索第三方的庫的頁面:https://deno.land/x , 我認(rèn)為以后必然會出現(xiàn)第三方庫的托管網(wǎng)站,大家還是從同一個地方去搜索,下載軟件包。
5. 內(nèi)置了很多工具
JavaScript生態(tài)亂七八糟的工具太多,最好是能大一統(tǒng)。
Deno順應(yīng)了這個趨勢, 提供了諸如打包、格式清理、測試、安裝、文檔生成、linting、腳本編譯等一攬子解決方案,內(nèi)置可用,不用到處安裝下載, 這一點兒必須點贊。
小結(jié)
不得不佩服Ryan Dahl, 打造一個Node.js已經(jīng)足夠“吹噓”一輩子了,可是他還能革自己的命,推出Deno這么一個新平臺,為興趣工作,不斷創(chuàng)新,讓人贊嘆。
Deno非常激進,直接采用了ECMAScript模塊,拋棄了Node Module,這也讓它和現(xiàn)有的JavaScript生態(tài)系統(tǒng)不兼容。
說Deno替代Node.js還為時過早,畢竟這才是一個剛剛1.0的版本,和一個發(fā)展了10多年的平臺難以直接相提并論。Deno還沒有經(jīng)受生產(chǎn)環(huán)境的考驗,對于一些特殊的案例表現(xiàn)如何我們還不知道。
也許過一段時間,會有“先行者”公司分享它們的使用經(jīng)驗,解決Deno的坑,那個時候Deno才會變成一個真正有用的平臺,讓我們拭目以待吧。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】