Categories
程式開發

Node.js要完了吗?


Deno 1.0 发布之后的这些天,关于Node.js的讨论也甚嚣尘上。在社交媒体和技术论坛中,许多开发人员都在谈论Node.js的命运走向。甚至有人断言Node.js即将迎来终结,至少这一天迟早会到来。我并不是什么先知,但在本文中我会与大家分享一些看法。本文主要尝试回答“Node.js是否要完”这个问题。我会向大家解释,为什么现在我们不必在意那些对Node.js命运的悲观预测,即便这种预测并非空穴来风。

本文最初发布于Geeky Hakcer博客,经原作者授权由InfoQ中文站翻译并分享。

引言

每当一种新的语言或技术诞生时,马上就会有很多人谈论它的终结。不信?只需打开谷歌并输入:

(随便选一种语言或技术)快要完蛋了吗?

不管你输入的是哪种技术都可以搜出来一大堆文章来,其中很多无疑写的就是垃圾。就算是Kubernetes之类的新技术也不能幸免,Node.js自然也不例外。但最近炒热“Node.js要完”这个话题的是Deno 1.0版本的发布。

如果你还不知道什么是Deno,请继续阅读下一节内容。这样你就会知道现在弥漫的恐慌情绪是从何而来的了。

什么是Deno?

Deno是由Node.js创建者Ryan Dahl编写的Javascript运行时。它的名字是“Node”一词的变体🙂

这个项目是Dahl在2018年的演讲“我对Node.js感到遗憾的十件事”中宣布的。相比以C/C++编写的Node.js而言,Deno是用Rust编写的。

在撰写本文时,Deno只有一个执行文件,压缩后的大小约为15MB。

Node.js要完了吗? 1

漂亮的Deno

此外,它没有类似NPM的或独立的外部包管理器。它的包管理是内置的。

Deno运行在沙盒模式下(意味着无法直接访问文件、网络和其他IO),因此任何权限都需要显式授予才行。

对于TypeScript爱好者的一个好消息是,Deno默认支持TS。

为什么要讨论Node.js的消亡?

之所以社区突然开始认定Node.js要完,主要是因为Deno的1.0版已于2020年5月13日正式发布。虽然这个项目已经开发了两年多时间,但这个正式版本在社交媒体中引发了Node开发人员的恐慌。

不用说,Deno和Node.js之间有很多区别。而且Deno不一定是Node.js的替代品(目前为止是这样),但不管怎样许多人都感到惊慌失措。我对他们恐惧的原因归了一下类,并分别做了探讨。

相同的创造者

造成现在这种局面的一大因素是两种产品有着相同的创造者。而且许多人认为Ryan Dahl不会再在Node上浪费时间了。于是乎,Node.js要完。

这个假设看似有理,其实大错特错。Node.js拥有一个庞大的社区,比其他许多社区都大得多。所以这并不是什么个人项目。

有人在反驳时将Dahl对Node.js的意义和Linus Torvalds对Linux的意义做了类比。我要说的是,这根本不是正确的对比。

首先,Dahl自2012年以来就没再参与Node.js的开发了。但在过去的30年来,Torvalds一直在以某种形式参与Linux的相关工作。

其次,就算是Torvalds离开了Linux的内核社区,也不能说Linux就会完蛋。而且也不要把Torvalds的退出与Linux社区在2018年9月的混乱局面划等号。2018年的那次混乱是一桩原因复杂的黑暗事件,其中只有一部分和Torvalds的退出有关系。

最后,Torvalds还创建了Git,但并未参与其维护工作。他把Git全盘交了出去,可是Git完蛋了吗?

Node.js社区是一片墓地,遍布着没人维护的库

众所周知,Node.js社区是无人维护的库的墓地。不夸张地说,社区中每天诞生或死亡的库的数量超过了每个人的细胞数量。

开源社区每隔三两天就会诞生一个新的框架,新框架或许会风骚一时,然后突然就没人维护了。随便搜一下,你就能在GitHub中找到几十个Star数众多但没人维护的项目。

可能有人会说,如果这就是社区中的日常,那么我们如何断定Node.js就不会遭遇同样的命运呢?

答案是不好说。Node.js的命运取决于社区和企业的支持。重点不在于项目筹集了多少资金,而在于它是否能得到更多的贡献和支持。如果大量使用Node.js的那些公司能雇用一些人为这个项目做出积极贡献,那么Node.js几乎不可能迎来末日。举个例子,Java已经存在25年了。Java之所以如此长寿,除了它可以在几乎所有设备上广泛使用的优势之外,另一个原因就是众多公司的支持。它得到的支持不仅来自于Oracle,而且还有Amazon、IBM和其他许多公司。

但请不要忘记,许多使用Node.js的公司都是寿命短、预算紧的初创公司。我们不能指望这些公司做出多大贡献。Node.js需要的是像Facebook或谷歌这样钱包鼓鼓的巨头的支持。

如果社区走向分裂,和/或大公司不再支持Node,那么我们就有理由担忧Node正走在衰落之路上了。

Deno比Node.js更好

当然,这一点没有疑问。在构建Node.js的过程中,人们获得了丰富的经验和知识,所以Deno能做得更好也不奇怪。但是,要评估一项技术的前景不能只看它的能力。那只是其中一个因素。普及率和支持水平是更重要的因素。而且Deno在这些方面并无优势,因为它还很年轻。因此,Node.js不会这么快死掉的。

但我们还可以假设最坏的情况,然后会发生什么呢?继续看下一节😀

如果Node.js死掉了会怎样?

我调查时发现,有些人讨论Node.js的终结就好像在谈论一个人刚刚死掉一样。问题是,编程语言或技术的消亡过程并不像人类的死亡那样。这种消亡不是一夜之间发生的事情。

技术的更新换代通常需要花费多年时间,因为公司无法在一夜之间或一个月内换掉现有的产品,然后迁移到新产品上。Node也不例外。Node.js库不能用在Deno中,为Deno开发新库是需要花时间的。另外,不要忘记专业知识的可用性。现在很少有人熟悉如何使用Deno来构建生产规模的产品。所有这些至少需要几年的时间。

Node.js要完了吗? 2

Node没机会了!

即便Node的消亡时间比预期的要早,市场也会长期需要相关的岗位。当然它不会像COBOL那样。但至少在接下来的5年中Node的开发人员都能找到工作。这应该可以为Node开发人员提供足够的缓冲期来转换方向。另外,由于Deno和Node都是JS世界的成员,因此从一个切换到另一个的过程并不会那么烦人。

结论

Node.js至少在未来五年内不会消亡,而当下在社交媒体中关于它死期的争论毫无意义。尽管有一些关于它走下坡路的判断,但到目前为止我们还没有一个明确的结论。就算我们对Node.js假设最坏的情况,而对Deno假设最光明的未来,各家公司要切换到新技术上依旧需要很长的时间,而且Deno的库生态建立起来也需要时间。如果你忧心忡忡,或者对新技术充满好奇,我强烈建议你尝试一下Deno。

最后,我想声明一下,我对Deno没有偏见。这是一个前景光明的好项目。我写这篇文章的目的不是要讨论Deno的未来,而是要减轻Node.js开发人员的压力。

作者介绍:

Kasra Madadipouya是一位软件工程师,对软件架构和设计、简洁代码和机器学习充满热情。他很享受用Java、Scala、Python和JavaScript编程的乐趣。喜欢博客、写作、机器学习、音乐、步行和天文学。i3WM粉丝。Linux和免费开源软件(FOSS)的资深支持者。对Deno感兴趣的话,可以看一看作者最新的教学资料:如何使用Deno和Oak构建REST API。邮箱:[email protected]

原文链接:

https://www.geekyhacker.com/2020/05/19/is-node-js-dying/