第一个全新的 io.js/node.js 结合版本很快就要发布了!
上周是个正常的旧金山的夏天,阳光明媚,偶尔有些热风。新 Node.js 基金会组织了一次聚会,40 位 Node.js 贡献者自 Collaborator Summit 以来第一次聚集在一起。
一 年前我们并没有 40 位贡献者能够这样聚在一起,但是今天这只是全部贡献者的一小部分 (359 GitHub org members as of 8/12)。这主要是因为 Joyent 的 Node.js 迁移到一个基金会,合并 io.js 到同一个基金会。作为统一 Node.js 项目,这比起以前是非常大的进步,很快就会发布 Node.js v4.0 —— 第一个 io.js 和 Node.js 合并后的统一版本。
时间轴
- 二月 — Joyent 在 Node Summit 宣布成立 Node.js Foundation
- 三月 — 基金会章程草案在不断传播
- 五月 — io.js TC 投票加入 Node.js 基金会并合并到 Node.js
- 六月 — 创始成员正式启动 Node.js 基金会
- 七月 — Node.js Foundation 董事会成立
- 八月 — 第一次 Node.js Collaborator Summit
- 九月 — Node.js v4.0 (第一个完全覆盖版本)
- 12 月 — World Domination
在过去的几个月里 Node.js 基金会成员一起管理和开发 io.js 和 Node.js。每个人都参与进来,希望能尽快发布一个统一的版本,TSC 同时也在致力于开发者社区上 io.js 和 Node.js 0.12.x 系列常规版本的发布。
在这过程中遇到了一些关于开发和发布过程的问题,还有关于 V8 方面相当大变化的争论。
原生模块
模块生态系统是作为一个 Node 开发者最好的一部分之一。这些模块中极其小的一部分我们称之为 “原生模块” ,意味着他们有依赖,在某种情况下,依赖于 V8 的 C++ API,而且并不是纯正的 JavaScript。这也意味着每个 Node.js 的重要版本都在打破这些原生模块,而且每个都必须更新去适应更新的 V8。
在 2013 年年中 Rod Vagg 发布 NAN (Native Abstractions for Node),提供给原生模块开发者,可以同时支持多个 node.js (0.8, 0.10, 0.12, etc) V8 版本的一个模块。这也意味着开发者不需要编写大量的代码来处理各个版本的 V8,但是这并没有阻止 V8 新的版本继续打破更多的原生模块。
NAN 原生模块开发者之前大部分时候只需要简单的升级 NAN 版本,支持最新的 Node.js 就可以了。不幸的是,因为 Node.js 的深度依赖链,需要越来越长的时间更新原生模块的依赖 (and the deps of deps, and deps of deps of deps, and so on)。
这里谈论的模块大概有多少?当前直接依赖于 NAN 的至少有 600 个模块 (少于一半的模块在 NPM) 。但是如果你在这些模块的所有深度依赖因素中,有高达到 30% 的 npm 模块直接依赖于 NAN,那么就需要很长的时间来跟上新版本,TSC 开发一个新版本的进程也需要更长的周期,才能让这些模块在重大版本发布之前升级,从而影响原生模块生态系统。
“io.js v3 是 node.js v4 alpha”是什么意思?
当 io.js 发布第一个支持 V8 更新版本 (node.js was a few years out of date) 的版本,NAN 发布新版本支持最新版 io.js 的时候,当前对 V8 的修改已经包括在 io.js v3 里面了,并且要求的不仅仅是更新版本的 NAN,还有一个 NAN 自身重大的 API 改进,要求改进所有依赖原生模块的代码。
要知道这是一个非常大的改进,原生模块的作者需要时间来跟上 io.js v3 的发布节奏,之后几个星期将会继续发布,让模块作者可以测试和升级。Node.js v4 将会包括更新版本的 V8,同时当前 NAN 版本已经支持了。这就意味着每个人升级到 NAN 最新版就可以使用 io.js v3,也同样可以使用 Node.js v4,所以这就是我们称 io.js v3 是 Node.js v4 的 “alpha 系列”的原因。
Node.js v4 将会包括所有 io.js 的改进和 node.js 0.12 的新特性。
作为一个统一的项目,合并后的版本号也就是 4.0,这也就是为什么 Node.js 一下子跳到 v4.0 的原因,避免和现有 io.js 版本号重叠。
现在,马上下载 io.js v3 版本,开始准备迎接 Node.js 下一个超级大版本吧!