大家好,我是Kason。22年11月14日,Deno发布了v1.28,这是他的第一个稳定版本v1.0.0发布2年后(2020年5月13日)。作为Node.js的竞争对手,Deno似乎并没有达到“取而代之”的目的。甚至,他在前端社区的话语权越来越小。那么,Deno这两年经历了什么,未来会不会取代Node.js呢?和Node.js的区别也是“js运行环境”,Deno和Node有什么区别?抛开所有的细节不谈,它们之间最大的区别在于Deno将“开放性”放在了非常重要的位置。什么平台最开放?答案是网络。因此,在Deno设计的方方面面都可以看到Web的影子。例如:原生支持许多WebAPI(例如fetch、URLSearchParams、WebWorkers...)。全局变量是像浏览器一样的窗口对象。本机支持浏览器标准ESM规范。那么,这些API、标准和“开放”之间有什么关系呢?这是一个小故事。Deno的作者“RyanDahl”也是Node.js的作者。在实施Node之初,他将工作重心放在了“事件驱动模型”的实施上。这时有个问题“如何解析项目中引入的模块”急需解决。他接受了NPM的package.json建议。简单来说,Node中的require方法会去package.json中查找如何解析模块(dependencies、devDependencies等)。后来,NPM逐渐成为Node中最流行的包管理器和事实上的标准,两者逐渐深度捆绑。NPM是一家私人公司,后来被Github收购。Github又归微软了。可以说,占主导份额的Node第三方依赖管理,被一家大型私营公司(微软)把持。另一方面,Deno,原生采用ESM规范,最初有两种导入模块的方式:从本地路径导入,例如:importxxxfrom'./a.ts';来自远程url,例如:import*asutilsfrom"https://deno.land/std@0.166.0/io/util.ts";相对于在Node中引入一个模块,相当于引入了一个npm包。Deno显然更愿意以url的形式导入模块。毕竟网页上最不能缺少的就是url链接了。从上面的故事也可以看出Ryan的理想,“RyanDahl”离开Node团队创立Deno充满了理想主义。在为Deno预热的JSConfEU2018[1]中,他也明确表示:“Deno不会兼容Node,否则开发者最终会实现Node模块。”在最初的正式版本中,Deno也确实实践了自己与Node不同的风格,针对Node的诸多缺陷提出了解决方案,例如:针对Node的安全问题,加强了对原生API访问文件系统和网络的限制,以及丢弃了package.json对TS的原生支持。Solo确实引起了开发者的热议,但并没有取得很好的市场反响。毕竟,当Deno的第一个正式版本发布时,Node已经存在了11年。Node问世后,Node团队只需要持续稳定地迭代Node核心API,大量的JS开发者就会为Node生态贡献优质的第三方模块。而当Deno出来的时候,会有多少开发者愿意为Deno贡献第三方模块呢?使用Node的现成包不是很好吗?于是,Deno亲自上阵,满足了开发者的一些刚性需求,比如:开箱即用的工具链工具(linter、formatter、test-runner、bundle)加上对TS的原生支持,可以说一个初始的Deno项目有一套工程最佳实践。对比Rust写的toolchain工具Rome(迭代了2年,发布了linter和formatter),可以发现Deno的迭代速度可以说是非常快的。应用框架比如对标express的Oak,还有fresh,一个以nobundle为卖点的全栈框架。发布与Deno系统深度集成的DenoDeploy。这些努力似乎没有达到预期的效果,比较Deno(蓝色)与Node(红色)的Google趋势。Node的走势普遍走高,而Deno的走势极其平缓(2020年5月v1时只有一点点起伏。用于开发DenoDeploy。为了获得更好的资本回报,势必需要一个更大的用户群,Deno最大的潜在用户群是Node开发者,理想主义的Ryan不得不面对现实,在最近的v1.28中,Deno宣布显着提升了NPM包的兼容性,现在开发者可以使用超过130wDeno中的NPM包。在这背后,Deno做了大量的Node.js适配工作(在Deno中实现了Node原生API的适配层)。“取代Node.js”的目标逐渐转变为“成为更好的Node.js”。对于德诺来说,这两年的经历就像是一个热血沸腾的大学生步入职场被社会磨平的过程。总结Deno酷吗?不仅没有存在,反而发展成为一家拥有2600万融资、17名员工的公司。Deno会取代Node吗?在可预见的未来,Deno将“小而美”。逐渐侵蚀Node在某些细分市场的市场份额。我应该使用Deno吗?如果你想“写个小脚本”或者“建个小项目”,相比Node,Deno的开发经验直接满分。而且嫖DenoDeploy不好吗?有什么理由推荐Deno吗?是的,看看隔壁Go的凸眼火腿肠。一起来看看Deno可爱的小恐龙吧~参考[1]JSConfEU2018:https://www.youtube.com/watch?v=M3BM9TB-8yA。
