Deno需要做什么才能取代Node.js?
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。
Deno是一個(gè)Javascript/TypeScript的運(yùn)行時(shí),旨在取代Node.js的地位。它擁有廣泛功能,討論度非常高,在Github上有將近68000個(gè)星星:

既然這么受歡迎,那么有人要問了:為什么Deno正式版本1.0發(fā)行時(shí)沒能成功呢?本文就將深入探討這個(gè)問題。
什么是Deno
Deno是由Ryan Dahl(也是Node.js的原創(chuàng)者)創(chuàng)建的安全的JavaScript和TypeScript運(yùn)行時(shí),它的創(chuàng)建是為了彌補(bǔ)2009年首次設(shè)計(jì)Node.js時(shí)的疏忽。這種出發(fā)點(diǎn)很有意義,我敢肯定每個(gè)程序員都希望有機(jī)會(huì)重寫他們10年前的代碼。
因此,Deno在Node.js基礎(chǔ)上新增了很多特征,以下是其中一些:
- Deno默認(rèn)設(shè)定就是安全的。必須通過選擇才能訪問文件系統(tǒng)、網(wǎng)絡(luò)或環(huán)境。
- Deno為TypeScript的延伸。
- 外部文件由URL明確引用,沒有package.json。
- 導(dǎo)入語句包括擴(kuò)展名為.ts,.tsx,.js,.json的文件。
- 內(nèi)置的依賴項(xiàng)檢查器和文件格式化工具。
憑借這些功能以及大量的開發(fā)者炒作,Deno于2020年5月正式發(fā)布了1.0版。接著……它撲街了。
為什么Deno沒有成功?
圖源:unsplash
Deno似乎擁有致勝的所有要素。它追隨者眾多,功能多樣扎實(shí),創(chuàng)作者經(jīng)驗(yàn)老道等等,但結(jié)果卻未能達(dá)到人們的期望。這是為什么?
我認(rèn)為最好從商業(yè)角度揭秘。很多人都忽略了一點(diǎn):構(gòu)建開源軟件與為用戶構(gòu)建軟件實(shí)在沒有什么不同。基本的經(jīng)濟(jì)原則——供求關(guān)系,仍然發(fā)揮著重要作用。當(dāng)有人創(chuàng)建一個(gè)新的開源項(xiàng)目時(shí),他們勢(shì)必要與已建立的平臺(tái)競爭。鑒于此,不僅要考慮新項(xiàng)目的優(yōu)越性,還必須與現(xiàn)有項(xiàng)目作比較。
對(duì)Deno來說,現(xiàn)有的是Node.js,盡管Node.js可能有所不足,但它仍能出色完成任務(wù)。如若Deno推出了Node.js無法復(fù)制的強(qiáng)大特征,就可能會(huì)改變游戲規(guī)則。但Deno沒有。
從用戶的角度來看,Deno具有的只是“次要特征”。它具有更簡潔的代碼庫,使用了最新最佳的經(jīng)驗(yàn),更加安全,但是這些東西對(duì)用戶來說僅是“特性”,并非產(chǎn)品自身。
你可以做一個(gè)像Gmail一樣的電子郵件客戶端,它應(yīng)更加安全并提速50%,可是用戶仍然不會(huì)轉(zhuǎn)而使用它,即使重新創(chuàng)建書簽用時(shí)不多,人們也覺得不值得。Deno第一擊未中:它具有許多不錯(cuò)的特征,但是沒有什么能讓用戶放棄Node.js的杰出之處。
Deno的另一個(gè)主要失敗之處是它不支持NPM軟件包。如果Deno能夠支持NPM軟件包,就很可能能夠改變形勢(shì)。Deno支持NPM軟件包將使它們不再像“單獨(dú)的電子郵件客戶端”,更像是對(duì)當(dāng)前客戶端的更好包裝。支持NPM軟件包將大大降低進(jìn)入壁壘。這將為用戶把項(xiàng)目和庫遷移至Deno提供一個(gè)良好的鋪墊。
這類似于TypeScript的“嚴(yán)格模式”。對(duì)于具有JavaScript強(qiáng)大代碼庫的用戶,直接轉(zhuǎn)用TypeScript會(huì)降低你幾周內(nèi)梳理錯(cuò)誤消息的效率。
由于TypeScript可以取消嚴(yán)格模式,于是它可以為用戶完全轉(zhuǎn)向使用TypeScript做鋪墊。這使它們的進(jìn)入門檻大幅降低,又助力TypeScript爭得近年來JavaScript搶占的市場(chǎng)份額。
啟示是什么?
圖源:unsplash
筆者認(rèn)為這是一個(gè)有趣的案例,例證了更多的商業(yè)方法。給我們帶來的啟示就是,如果你要發(fā)布新產(chǎn)品,請(qǐng)務(wù)必確保它具有強(qiáng)大的優(yōu)點(diǎn),能夠克服人們拒絕轉(zhuǎn)變現(xiàn)狀的阻力。
Deno具有魅力,但歸根到底,只是多了一系列的小“修復(fù)”,代價(jià)卻是失去了Node.js培育的整個(gè)NPM生態(tài)系統(tǒng)(也曾助它們壯大)。
那么,Deno接下來何去何從?首先他們得做出決定。要么努力增加Node.js庫的向后兼容性,要么提供更多好處來誘使用戶轉(zhuǎn)換平臺(tái)。筆者認(rèn)為更應(yīng)拓展向后兼容,此后將極大改善項(xiàng)目的未來。
無論如何,祝Deno團(tuán)隊(duì)好運(yùn),愿好技術(shù)長存。