Node.js发展史

诞生

  • 取名 Node:Major refactoring: program name now “node”

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

2009

  • 讨论 npm(Node package manager):First very early preview of npm, the Node package manager
  • 首次公开演进:Ryan Dahl’s (Creator of Node.js) Original Node.js Talk

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 诞生:Express: A Node.js web development framework
  • Socket.io 诞生:Socket.io initial release
  • Heroku 提供 Node.js 支持:Experimental Node.js Support on Heroku
  • 第二次公开演讲:Ryan Dahl’s Google Tech Talk on Node.js
  • Node.js 发布 v0.2.0:Node.js 0.2.0 released

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

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

2011

  • 出现新手教程:Node.js Guide
  • 开设论坛:Ryan Dahl’s AMA on Reddit
  • npm 正式发布:npm 1.0: Released
  • 出现新手教程电子书:The Node Beginner Book, an introduction to Node.js, is now complete
  • 投入生产使用:LinkedIn uses Node.js
  • 讲述 Node.js 的故事:Ryan Dahl talks about the history of Node.js and why he created it
  • 又一个大型企业用了起来:Node.js in production at Uber

一系列新手教程的出现意味着大家发现了 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

  • 创始人离开:Node.js creator Ryan Dahl steps away from Node’s day-to-day
  • Node.js 发布 v0.8.0:Node.js v0.8.0 [stable] is out
  • 出现商用解决方案框架:Hapi, a Node.js framework

重构完 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

  • 出现 CMS:Ghost: Blogging with Node.js
  • 出现生态技术栈组合最佳实践:The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
  • eBay 上船:How We Built eBay’s First Node.js Application
  • 暴露出内存问题:Node.js Memory Leak at Walmart
  • PayPal 开源类 Express 框架:PayPal releases Kraken, a Node.js framework
  • 出现激进派 Web 开发框架:Koa – Web framework for Node.js

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

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

2014

  • 再次交棒:TJ Fontaine takes over Node project
  • 成立顾问委员会:Node.js Advisory Board
  • Netflix 上船:Node.js in Flame Graphs – Netflix
  • 走向分裂:IO.js – Evented I/O for V8 Javascript

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

  • IO.js 率先走向 1.0:IO.js 1.0.0
  • 成立 Node.js 基金会:Joyent Moves to Establish Node.js Foundation
  • IO.js 与 Node.js 和解:IO.js and Node.js reconciliation proposal

这场冲向 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

  • npm 支持私有模块:npm Private Modules
  • 第三任领袖离开:Node lead TJ Fontaine is stepping down and leaving Joyent
  • IO.js 合入 Node.js:Node.js and io.js are merging under the Node Foundation

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

  • 4.0 is the new 1.0

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

Q4

  • 首次发布 LTS:Node v4.2.0, first Long Term Support release
  • 新成员加入基金会:Apigee, RisingStack and Yahoo join the Node.js Foundation
  • Node Interactive 大会:Node Interactive

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

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

2016

Q1

  • Express becomes an incubated project
  • The leftpad incident
  • Google Cloud Platform joins the Node.js Foundation

一个沸沸扬扬的新闻是 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 has 210.000 users

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

Q3

  • npm 新任 CTO:CJ Silverio becomes the CTO of npm
  • 欧洲首次 Node Interactive 大会:The first Node Interactive in Europe

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

Q4

  • The yarn package manager got released
  • Node Interactive North America in Austin, Texas
  • Node.js 6 becomes the LTS version
  • IBM, Intel, Microsoft, Mozilla and NodeSource Join Forces on Node.js API; Node.js Build System will Start Producing Nightly node-chakracore Builds

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 Certification Program to be launched by the Node Foundation
  • NASA 上船:NASA’s Node.js Case Study Released

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

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

Q2

  • 发布 v8.0:What’s new in Node 8
  • N-API 支持:N-API: Next generation Node.js APIs for native modules
  • 基金会新任领袖:Mark Hinkle becomes the new executive director of the Node Foundation

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

  • 原生支持 HTTP2:HTTP2 Arrives into the Node.js Core
  • 首份 Node.js 调查报告:The Node.js Survey of 2017 Released
  • 迎来新 V8 引擎:A new V8 is coming, Node.js Performance is Changing
  • 搭载新 V8 引擎:Node.js 8.3.0 is now available shipping with the Ignition + TurboFan execution pipeline
  • 再次走向分裂:Node.js Forked Again Over Complaints of Unresponsive Leadership

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

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

Q4

  • 首份官方发展现状报告:Node.js State of the Union 2017
  • 8.x 步入稳定阶段:Node.js 8 Moves into Long-Term Support and Node.js 9 Becomes the New Current Release Line
  • 继续疯狂开会:Node.js Interactive 2017 Vancouver
  • npm 账号安全性提升:Two-factor authentication & read-only tokens arrive to npm

从官方报告来看,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

  • 搜罗案例展示:Announcing The Node.js Application Showcase
  • 创立 JS Interactive 大会:Introducing JS Interactive: An Event for the JavaScript Ecosystem

基金会建站搜罗 Node.js 应用案例,见[https://foundation.nodejs.org/resources/app-showcase](Application Showcase):

Amazing apps, products and projects built with Node.js

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

Q2

  • 支持 HTTP2 push 特性:Node.js can HTTP/2 push!
  • 开启 10.x:The Node.js Project Introduces Latest Release Line: Node.js 10.x
  • 发布 npm 6:Announcing npm@6
  • 发布第三份年度调查报告:Third Annual Node.js User Survey Data Now Available

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

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

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

Q3

  • Node.js 创始人道出 10 大懊悔:Ryan Dahl: 10 Things I Regret About Node.js
  • Google App Engine支持 Node.js 部署:Now, you can deploy your Node.js app to App Engine standard environment
  • 跨 LTS 的 N-API 支持:N-API: Next generation APIs for Node.js native addons available across all LTS release lines

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 Interactive 2018 Videos released
  • 10.x 迎来 LTS,11.x 提上日程:October Brings Node.js 10.x to LTS and Node.js 11 to Current!
  • 重新计划 ES Module:ECMAScript modules in Node.js: the new plan

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

2019

Q1

  • 介绍 Node.js 各个工作组:Introducing Node.js Working Group Series: From Security to Performance
  • nodejs.dev 上线:Node.js Selected by Google for .dev Top Level Domain Early Access
  • Node.js Foundation + JS Foundation = OpenJS Foundation:Introducing the OpenJS Foundation: The Next Phase of JavaScript Ecosystem Growth
  • 准备开会:Now Open! Call For Papers for Node+JS Interactive 2019

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

Q2

  • 迎来新的实验性 ES Module 支持:Announcing a new –experimental-modules
  • npm 人事变动:Nice People Matter? NPM may stand for Not Politely Managed – job cuts leave staff sore
  • Node.js 创始人启动 deno:Ryan Dahl: Deno, a new way to JavaScript
  • 发布 Node.js 12:Introducing Node.js 12
  • npm 开源与盈利的矛盾:The Economics of Open Source by C J Silverio

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?

参考资料

  • History of Node.js on a Timeline
  • A brief history of Node.js
  • “I regret…” says the creator of Node.js and dawn of Deno
  • Design Mistakes in Node
  • What is the difference between node.js and io.js?

原文发布于微信公众号 - ayqy(gh_690b43d4ba22)

原文发表时间:2019-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券