Node.js发展史

诞生

Ryan Dahl在 2009/3/3 的这次代码提交将蛋壳中的 NodeJS 项目命名为 node,从此,世界上多了一个 Node.js

2009

Package Manager 是第一件要考虑的事情,目的在于解决代码复用的问题:

There are a lot of very useful modules out there, but it’s tricky right now to actually use more than one of them together.

通过一套模块定义规范来实现复用,目标是:

  • 易声明易公开:很容易定义一个 package 并公开出去

  • 易安装易引用:要能轻易引用开源模块,而不需要提供太多的 package 元信息,并且装完之后能够很方便地引用其功能

  • 即取即用:package 的版本、校验、配置、安装位置等都不必关心,所有对可用性没有明显影响的问题都应该推迟

  • 集中管理:共享同一个 package,方便维护

迄今(2019/6/29)为止,npm 仍具有这些特征,也是早期设计所决定的

同年,Ryan Dahl 在 JSConf 发表了关于 Node.js 的首次公开演讲,尝试走出去

2010

Express 与 Socket.io 是生态发展的必然产物,Express 作为 Node.js 生态中资格最老的 Web 开发框架,至今仍有一些难以替代的优势(比如成熟可靠的生态支持)

Heroku 对 Node.js 提供了实验性的支持,这意味着走出去了一小步。同时,一边推广(Google Tech Talk),一边持续演进(迭代 v0.2.0)

2011

一系列新手教程的出现意味着大家发现了 Node.js 的(学习)价值,之后 LinkedIn、Uber 陆续上船更是印证了这一点,也标志着 Node.js 正式投入生产使用,算是一个重要的里程碑

Node.js 诞生 2 年后,其 Package Manager 终于正式面世,就叫 npm。最后集成到 Node.js 安装包中,成为Node 模块管理的事实标准

Ultimately I included NPM in the Node distribution, which much made it the defacto standard.

同时,通过 Reddit 论坛、Youtube 讲故事的方式与社区联动,让更多的思想汇聚起来

2012

重构完 libuv 之后,Node.js 核心部分已经趋于完备,创始人 Ryan Dahl 功成身退,将决策权交给 npm 的创始人Isaac Schlueter

Node.js 发展趋于成熟的另一个标志是生态中出现了面向企业的解决方案,例如Hapi

hapi is a simple to use configuration-centric framework with built-in support for input validation, caching, authentication, and other essential facilities for building web and services applications.

2013

MEAN 组合实践、Web 开发框架的更迭、CMS 的出现意味着Node.js 生态发展进入百花齐放的阶段

另一方面,伴随着在企业场景中的大规模应用,也逐渐暴露出 Node.js 自身的一些潜在问题,如内存管理

2014

Node.js 又一次交棒,由一直在项目中起重要作用的Timothy J Fontaine接管

同年,Joyent 公司(Node.js 创始人所在的公司,拥有 Node.js 商标)提议成立顾问委员会,打算从完全开放走向自治

As the community becomes more complex, it is important that we find ways to balance the needs of all constituents and provide a platform for these organizations to come together and to provide input into the project.

这意味着话语权将从开放的开源社区转移到正在使用 Node.js 的几家大公司手里(Joyent、Netflix 等):

Previously, Node.js was run via mailing lists, GitHub issues, and anyone could contribute their idea. This idea started getting some hate because it brought control away from your average, everyday contributor and moved the power to the “big shots”: companies such as Walmart, Yahoo, IBM, Microsoft, Joyent, Netflix, and PayPal.

此举招致开源社区的强烈抵触,因而 fork 出了 IO.js,继续以完全开放的社区驱动模式快速发展:

This repository began as a GitHub fork of joyent/node where contributions, releases, and contributorship are under an open governance model.

至此,Node.js 第一次走向分裂

2015

Q1

这场冲向 1.0 版本的竞速赛以 IO.js 获胜告终。继而,顾问委员会中的几大公司联手成立了 Node.js 基金会,表态支持社区驱动的开放管理模式:

Joyent, IBM, Microsoft, PayPal, Fidelity, SAP and The Linux Foundation Join Forces to Support Node.js Community With Neutral and Open Governance, Resources for Developers

紧接着开源社区作出回应,提议和解,因为管理模式上的冲突已经消除了

Q2

Node.js 基金会成立后不久,第三任领袖 TJ Fontaine 宣布离开,交由基金会与社区管理

It’s because of this strong team, community, and the formation of the Foundation that it makes it the right time for me to step back.

紧接着,和解之后,IO.js 合入 Node.js,从分裂走向统一

另外,npm 还提供了私有模块支持,类似于Github 私有仓库,算是对商用的支持

Q3

IO.js 合入之后,Node.js 迎来了真正意义上的 1.0 版本版本帝正式从混乱的 0.x 进入 4.x 时代

Q4

发布了第一个 LTS 版本,标志着Node.js 进入稳定发布阶段

同时,Yahoo、RisingStack 等大公司也纷纷加入基金会,共同参与 Node.js 建设。此外,还召开了第一次 Node Interactive 大会,分享 Node.js 在生产中的应用价值

2016

Q1

一个沸沸扬扬的新闻是 leftpad 事件,暴露出 npm 设计/管理上的一些问题:

This hasn’t been the first time that members of the community have disagreed over a name. In a global namespace for unscoped modules, collisions are inevitable. npm has a package name dispute resolution policy for this reason. That policy encourages parties to attempt an amicable solution, and when one is impossible, articulates how we resolve the dispute.

另外,Express 被纳入孵化项目(incubated project),将获得 Node.js 基金会的技术支持:

The Node.js Foundation Incubator Program was launched last year. Projects under the Node.js Foundation Incubator Program receive assistance and governance mentorship from the Foundation’s Technical Steering Committee and related working groups. The Incubator Program is intended to support the many needs of Node.js users to maintain a competitive and robust ecosystem.

同时,Google 也加入 Node.js 基金会,队伍越来越壮大

Q2

npm 注册用户突破 21 万,其中 7 万多人发布过 package。npm 已经成为一个相当庞大的东西,在 Node.js 生态起着不可替代的作用

Q3

npm 的变化也关乎 Node.js 的发展,像集成安装包一样绑定在一起。另外,第二次 Node Interactive 大会在欧洲举行

Q4

Yarn 适时推出,算是 npm 客户端的增强版

The product of that work is called Yarn — a fast, reliable, and secure alternative npm client.

服务端仍使用 npm registry,这无可撼动

继首个 LTS 版本(v4.2.0)之后,v6.0 成为第二个 LTS 版本。同时,IBM、Microsoft 等巨头开始发力,将 Node.js 推向 8.0 版本

另外,继续疯狂开会,第三次 Node Interactive 选在北美

2017

Q1

Node.js 的高速发展对行业传统技术栈造成了冲击,为了解决企业面临的人才技能问题,Node.js 基金会推出开发者认证计划,期望通过认证的开发者具备 Node.js 开发能力

NASA 上船标志着“Node.js 上天了”……玩笑,毕竟大型企业上船已经不新奇了

Q2

Node.js v8.0 发布,巨头发力告一段落,最重要的应该是N-API 支持

This API will be Application Binary Interface (ABI) stable across versions of Node.js. It is intended to insulate Addons from changes in the underlying JavaScript engine and allow modules compiled for one version to run on later versions of Node.js without recompilation.

在社区+基金会的开放管理模式下,基金会更换领导人已经不再是成立顾问委员会一类的大事了

Q3

特性持续迭代,并借助最新 V8 引擎得到一波性能提升

另一件值得关注的事情是,因为 Node.js 基金会下 TSC( Technical Steering Committee,技术指导委员会)的执行力问题,Node.js 再次走向分裂(新的 fork 称为 Ayo,还念 IO.js)

Q4

从官方报告来看,Node.js 已经达到了相当大规模的应用

Every day there are more than 8.8 million Node instances online, that number has grown by 800,000 in the last nine months alone. Every week there are more than 3 billion downloads of npm packages. The number of Node.js contributors has grown from 1,100 contributors last year to more than 1,500 contributors today.

同时,v8.9.0 成为 8.x 的首版 LTS,进入稳定阶段

另外,npm 在安全性上也迈出了一小步,支持账号双因子认证

2018

Q1

基金会建站搜罗 Node.js 应用案例,见Application Showcase

Amazing apps, products and projects built with Node.js

另一方面,由于 Node.js 与 JavaScript 密不可分,干脆合作一起开会,就叫 JS Interactive

Q2

npm 6 在安全方面做了更多的事情,对存在安全问题的 package 有了一些管控措施,如npm audit

HTTP2 等前沿特性也在持续推进,用户调查也没有停下,关注 Node.js 应用趋势

另一方面,8.x 时代落幕,进入 10.x,期望搭载V8 引擎 v6.6

Q3

9 年后,Node.js 的创始人 Ryan Dahl 指出 Node.js 的 10 大设计失误,包括加进来又去掉的 Promise API、安全问题、GYP 构建系统、package.json 入口字段、node_modules 结构等等

回过头看,npm 上大量的案例表明跨版本(从 6.x 到 10.x)的 N-API 支持确有其实践意义

Q4

继实验性支持(Node.js 8.5.0 (2017-09-12))之后,正式的 ES Module 支持终于进入议程

2019

Q1

首次介绍基金会内部的工作机制,进一步公开透明。紧接着,Node.js 基金会与 JS 基金会合并,成立 OpenJS 基金会

Q2

Node.js 创始人再度出发,希望重新建立更好的 Node.js,即deno

A secure JavaScript/TypeScript runtime built with V8, Rust, and Tokio

同时,Node.js 增强了实验性的 ES Module 支持,包括动态引入(import())等,并伴随着 V8 引擎版本升级以及 ES 特性支持,进入 12.x 迭代

另外,npm 经营上似乎有一些变化,出现一波人事变动,可能关乎 Node.js 的发展:

The actual concern I have is that the JavaScript package manager and language commons are in the hands of a VC-funded company, which may or may not be having financial trouble, If they’re not okay, this is something the entire JavaScript language community needs to pay attention to now.

因为 Node.js 语言的发展与盈利性质的 npm 公司绑定在一起,一直以来都是个隐患

The JS package commons is in the hands of a for-profit entity. We trust npm with our shared code, but we have no way to hold npm accountable for its behavior. A trust-based system cannot function without accountability, but somebody still has to pay for the servers. How did we get here, and what should JavaScript do now?

参考资料

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code