编写一个io.js兼容的npm模块

我应该在我的package.json中引用io.js吗? 如果我想编写一个与Node和io.js兼容的模块,还有其他什么我应该做的不同吗?

Heroku文档说,你可以添加“iojs”条目到package.json的“引擎”部分。

首先,你应该参考io.js的变更日志 ,描述自1.0.0版本以来对io.js所做的修改,正如他们所说的那样,它引入了对API的重大修改(与Node.js 0.11.14相比)是当时的开发版本)。

由于下面的semver意味着一个主要的版本bump会引入向后不兼容的更改,这意味着您将不得不在应用程序中处理这些差异,并根据平台使用适当的API调用。

通过更新日志快速阅读似乎表明,现有的API之间的差异不是那么重要,但有些地方,你将不得不格外小心。 io.js中有很多新的API,它们本身并不在Node.js上,因此您可能无法使用它们(或者提供一些兼容性层(如果可能的话,将这些添加到Node.js中)。

此外,由于ECMAScript 6function在Node.js 0.10,0.12和io.js中的不同级别上实现,因此您必须select可以使用哪些function以保持兼容性,这取决于您需要/select的平台和版本支持。

警告 – 个人意见如下

这个问题是为什么我不批准io.js后面的团队分叉并引入向后不兼容的更改, 仍然使用Node.js包pipe理器 npm来处理新平台的依赖关系的确切原因。 你最终只能为其中的一个编写软件包,或者你使用一些疯狂的决策逻辑来select如何调用一个函数,因为这个函数的签名在两者之间是不同的。

最后,开发商感到沮丧,并且离开了另一个项目/语言,社区和模块可用性分散,没有人获胜。

我衷心希望社区不要分裂,而是select一个平台,而另一个平台将会消失,无论是哪个(Node.js或io.js)。 或者说,这些项目在某个时候汇聚在一起,把两者中最好的一个整合到一个平台中。