大家好,我是Kason。22年11月14日,Deno发布了v1.28,这是他的第一个稳定版本v1.0.0发布2年后(2020年5月13日)。作为Node.js的竞争对手,Deno似乎并没有达到取代前者的目的。甚至,他在前端社区的话语权越来越小。那么,Deno这两年经历了什么,未来会不会取代Node.js呢?欢迎加入人类优质前端框架群。Daifei和Node.js的区别在于js运行环境。Deno和Node有什么区别?抛开所有的细节不谈,它们之间最大的区别在于Deno将开放性放在了非常重要的位置。什么平台最开放?答案是网络。因此,在Deno设计的方方面面都可以看到Web的影子。例如:原生支持很多webAPI(如fetch、URLSearchParams、WebWorkers...)全局变量是和浏览器一样的window对象,原生支持浏览器标准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中,他也明确表示Deno不会兼容Node。风格迥异,针对Node的诸多缺陷提出了解决方案,例如:针对Node的安全问题,加强了原生API访问文件系统和网络的限制,放弃了package.json对TS的原生支持。引发热议,但并未取得良好的市场反响。毕竟,当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的迭代速度可以说是非常快的。受koa启发的oak等应用框架,以及以nobundle为卖点的fresh全栈框架。DenoDeploy将发布系统与Deno进行深度整合的努力似乎并没有达到预期的效果。比较Deno(蓝色)和Node(红色)的谷歌趋势。Node的走势普遍走高,而Deno的走势极其平缓(2020年5月v1的时候只有一点点起伏。对于DenoDeploy的发展。为了获得更好的资本回报,势必需要更大的用户基础.Deno最大的潜在用户群体是Node开发者,理想主义的Ryan不得不面对现实,在最近的v1.28中,Deno宣布大幅提升了NPM包的兼容性,现在开发者可以在其中使用超过130w个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可爱的小恐龙吧~
