Deno需要做什麼才能取代Node.js?

2020-11-24 51CTO

Deno需要做什麼才能取代Node.js?

為什麼Deno正式版本1.0發行時沒能成功呢?本文就將深入探討這個問題。

作者:讀芯術來源:今日頭條|2020-10-29 18:36

本文轉載自公眾號「讀芯術」(ID:AI_Discovery)。

Deno是一個Javascript/TypeScript的運行時,旨在取代Node.js的地位。它擁有廣泛功能,討論度非常高,在Github上有將近68000個星星:


既然這麼受歡迎,那麼有人要問了:為什麼Deno正式版本1.0發行時沒能成功呢?本文就將深入探討這個問題。

什麼是Deno

Deno是由Ryan Dahl(也是Node.js的原創者)創建的安全的JavaScript和TypeScript運行時,它的創建是為了彌補2009年首次設計Node.js時的疏忽。這種出發點很有意義,我敢肯定每個程式設計師都希望有機會重寫他們10年前的代碼。

因此,Deno在Node.js基礎上新增了很多特徵,以下是其中一些:

  • Deno默認設定就是安全的。必須通過選擇才能訪問文件系統、網絡或環境。
  • Deno為TypeScript的延伸。
  • 外部文件由URL明確引用,沒有package.json。
  • 導入語句包括擴展名為.ts,.tsx,.js,.json的文件。
  • 內置的依賴項檢查器和文件格式化工具。

憑藉這些功能以及大量的開發者炒作,Deno於2020年5月正式發布了1.0版。接著……它撲街了。

為什麼Deno沒有成功?

圖源:unsplash

Deno似乎擁有致勝的所有要素。它追隨者眾多,功能多樣紮實,創作者經驗老道等等,但結果卻未能達到人們的期望。這是為什麼?

我認為最好從商業角度揭秘。很多人都忽略了一點:構建開源軟體與為用戶構建軟體實在沒有什麼不同。基本的經濟原則——供求關係,仍然發揮著重要作用。當有人創建一個新的開源項目時,他們勢必要與已建立的平臺競爭。鑑於此,不僅要考慮新項目的優越性,還必須與現有項目作比較。

對Deno來說,現有的是Node.js,儘管Node.js可能有所不足,但它仍能出色完成任務。如若Deno推出了Node.js無法複製的強大特徵,就可能會改變遊戲規則。但Deno沒有。

從用戶的角度來看,Deno具有的只是「次要特徵」。它具有更簡潔的代碼庫,使用了最新最佳的經驗,更加安全,但是這些東西對用戶來說僅是「特性」,並非產品自身。

你可以做一個像Gmail一樣的電子郵件客戶端,它應更加安全並提速50%,可是用戶仍然不會轉而使用它,即使重新創建書籤用時不多,人們也覺得不值得。Deno第一擊未中:它具有許多不錯的特徵,但是沒有什麼能讓用戶放棄Node.js的傑出之處。

Deno的另一個主要失敗之處是它不支持NPM軟體包。如果Deno能夠支持NPM軟體包,就很可能能夠改變形勢。Deno支持NPM軟體包將使它們不再像「單獨的電子郵件客戶端」,更像是對當前客戶端的更好包裝。支持NPM軟體包將大大降低進入壁壘。這將為用戶把項目和庫遷移至Deno提供一個良好的鋪墊。

這類似於TypeScript的「嚴格模式」。對於具有JavaScript強大代碼庫的用戶,直接轉用TypeScript會降低你幾周內梳理錯誤消息的效率。

由於TypeScript可以取消嚴格模式,於是它可以為用戶完全轉向使用TypeScript做鋪墊。這使它們的進入門檻大幅降低,又助力TypeScript爭得近年來JavaScript搶佔的市場份額。

啟示是什麼?

圖源:unsplash

筆者認為這是一個有趣的案例,例證了更多的商業方法。給我們帶來的啟示就是,如果你要發布新產品,請務必確保它具有強大的優點,能夠克服人們拒絕轉變現狀的阻力。

Deno具有魅力,但歸根到底,只是多了一系列的小「修復」,代價卻是失去了Node.js培育的整個NPM生態系統(也曾助它們壯大)。

那麼,Deno接下來何去何從?首先他們得做出決定。要麼努力增加Node.js庫的向後兼容性,要麼提供更多好處來誘使用戶轉換平臺。筆者認為更應拓展向後兼容,此後將極大改善項目的未來。

無論如何,祝Deno團隊好運,願好技術長存。

【責任編輯:

趙寧寧

TEL:(010)68476606】

點讚 0

相關焦點

  • Node.js 開發者們都在做什麼?
    Node.js開發者們都在做什麼?
  • 前端工程化以及如何通過Node.js中babel來編譯es6模塊化代碼
    解決這兩個問題的方法就是模塊化什麼是模塊化?模塊化就是把單獨的一個功能封裝到一個模塊(文件)中,模塊之間相互隔離,但是可以通過特定的接口公開內部成員,也可以依賴別的模塊模塊化開發的好處:方便代碼的重用,從而提升開發效率,並且方便後期的維護一開始模塊化規範有哪些?
  • Node.js 2018 用戶調查:最愛 Express,最想學 Rust
    Node.js 基金會近日發布了 2018 Node.js 用戶調查報告,這是該基金會舉報的第三屆年度用戶調查,於 2017 年
  • 什麼是VUE?VUE與JS的對比
    我們需要一個UI元素和屬性相互綁定的方法 2. 我們需要監視屬性和UI元素的變化 3.我們需要讓所有綁定的對象和元素都能感知到變化1.1.1. vue與js的對比1.1.1.1. js的實現(了解)<!
  • Node.js 入門 - 使用 Express + Sequelize 實作 API
    課程簡介現代前端開發,無論做什麼都基本離不開 Node.js了。有了 Node.js,js 就成了一個無所不能的語言。無論你是使用 Webpack來打包前端項目,或者來開發Api接口,還是使用 React Native開發原生 App,亦或是開發桌面軟體,Node.js都是必不可少的東西了。Node.js 是一個基於 Chrome V8 引擎的 Javascript 運行環境課程主要講解 如何使用 nvm來安裝 Node.js,以及 npm的用法。
  • total.js 2.4.0 發布,Node.js 的 MVC 框架
    total.js 2.4.0 發布了。total.js 是一個 web 應用框架,使用 JavaScript、HTML、CSS 和 Node.js(MVC) web 應用框架來構建 web 網站和 web 應用。
  • 「原創」如何高效管理你的js代碼
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1.為什麼需要管理好js代碼1.1 你有遇到這些情況嗎其他項目使用自己慢慢豐富的工具類,你是copy過去的?難免需要刪除整個node_modules並重裝依賴庫,你會因為重寫過某些庫的代碼而糾結?
  • total.js 1.9.0 發布,Node.js 的 MVC 框架
    added: @{nocompress html}, @{nocompress js}, @{nocompress css}, @{nocompress all}added: req.authorize(callback(err, userprofile, isAuthorized))added: res.content(code, body, type,
  • websocket項目 搭建node專題及常見問題 - CSDN
    之前項目裡做即時通信都是用的輪循,輪詢的效率低,非常浪費資源,後面好幾個項目都開始用的websocket配合koa和redis來實現,現在整理整理深入了解下整個即時通信實現的過程。前提:需要安裝的包koa 由 Express 幕後的原班人馬打造,使用起來比Node更優雅簡潔 https://koa.bootcss.com/koa-router 是路由導航,實際應用中可以認為node接口https://www.npmjs.com/package/koa-routerkoa-websocket koa的中間件對websocket的封裝 https://www.npmjs.com
  • Node.js核心框架貢獻者力作,終於有電子版了,還是高清PDF
    本書是Node.js的實戰教程,涵蓋了為開發產品及Node應用程式所需要的一切特性、技巧以及相關理念。從搭建Node開發環境,到一些簡單的演示程序,到開發複雜應用程式所必不可少的異步編程。第一部分介紹了Node.js,教授了一些用它做開發所需要的基礎技術。第l章闡述了Node的特徵,並給出了一些示例代碼。第2章指導讀者創建了一個示例程序。第3章闡述了Node.js開發的困難之處,以及可以用來克服這些困難的技術,並給出了組織程序代碼的辦法。
  • total.js 1.9.0 發布,Node.js 的 MVC 框架 - OSCHINA - 中文開源...
    added: @{nocompress html}, @{nocompress js}, @{nocompress css}, @{nocompress all}added: req.authorize(callback(err, userprofile, isAuthorized))added: res.content(code, body, type,
  • JupyterLab 3.0發布:支持中文界面,安裝插件無需Node.js
    新功能簡介支持中文界面JupyterLab現在提供了設置用戶界面顯示語言的功能,用戶需要將語言包作為單獨的Python包安裝。語言包在JupyterLab的GitHub的存儲庫中提供。當然,更簡單的方法是用pip安裝。
  • Web3.js基於以太坊的Javascript API
    web3.js是一個庫集合,你可以使用HTTP或IPC連接本地或遠程以太它節點進行交互。 web3的JavaScript庫能夠與以太坊區塊鏈交互。 它可以檢索用戶帳戶,發送交易,與智能合約交互等。Version : 1.0.0-beta.36Web3.js API類型eth:Etherum區塊鏈相關方法;net:節點的網絡狀態;personal:帳戶功能和發送;db:獲取/放置本地LevelDB;shh:使用Whisper的P2P消息傳遞;安裝Web3.jsnode實例化web3首先,我們檢查是否使用的dapp
  • 來做一個誰動拍誰的相機吧
    當然只有電子件也只能實現功能,為了讓這些組件能夠在野外正常工作,還需要一些防水的包裝殼,防水膠等材料。error) {console.log(tweet);}});注意以上的代碼中需要替換的位置。接下來,你需要在Twitter中申請接入權限。然後使用WinSCP將上面得到twitter.js文件上傳到Edison的根目錄,然後在SSH中輸入「node twitter」命令運行該文件。
  • 手寫動態 3D 蛛網圖 | THREE.js
    https://threejsfundamentals.org/threejs/lessons/threejs-primitives.html可是它有一個問題:所有的稜都是一樣的長度。我們的數據可視化中,需要根據數據值的不同,來設置稜的長度。於是,這裡要做一點探索。首選的方案,是非侵入式的。
  • 從Rust到遠方:ASM.js星系
    這篇文章會解釋什麼是ASM.js,怎樣編譯博客解析器到ASM.js以及如何在瀏覽器中和Javascript一起使用ASM.js. 使用ASM.js的目標是當作WebAssembly不可用的備用方案。我強烈建議你讀讀前一篇關於WebAssembly的文章,因為他們有很多共同的地方#什麼是ASM.js,為什麼需要ASM.jsWeb應用的主要語言是Javascript,任何想要運行在Web上的應用都必須編譯成Javascript,比如遊戲。
  • 學習前端需要知道哪些內容學習起來更容易
    任何企業都離不開前端,因為我們需要自己的官方網站。我知道有些人開始從各行各業轉行到前端。有受周圍朋友影響的。甚至有感興趣的或者想提升自己的。那麼對於零基礎轉行學習的同學肯定以下一些疑問:web前端需要學習哪些知識,web前端的學習路線,以及學習web需要多長時間的問題。第一,想學web前端需要學什麼知識?