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