addon 这个单词来源于英文的复合名词 add-on,add-on 来自短语 add on,意为附加物,可翻译为插件。
在 Node.js 领域,addon 是一种特殊模块,和普通的 JS 包的区别在于 addon 主要是用 C/C++ 写的,而普通模块是用 JS 写的。
例如我们使用的 npm 库 canvas、node-sass、sqlite3 等,这些就是 addon 模块,我们可以在它们的安装目录中看到里面有 .node 后缀名的文件。
addon 适用场景
addon 的开发和使用,相对纯 JS 模块都比较复杂,一般只有特定场景会使用,包括:
性能优化
众所周知,C++ 相对 JS 有绝对的性能优势。addon 技术使得 Node.js 拥有接近 C++ 的性能。如果你的 Node.js 工程有一小块业务属于 CPU 密集型计算,可以使用 addon 技术来优化性能。
复用现有 C/C++ 库
展开剩余63%Node.js 诞生至今已经有 15 年了,开发者通常会将其他成熟语言常用的库,用 JS 再实现一次。
但是有些 CPU 密集型计算的库,不适合用 JS 写,这时就会将原有的成熟的 C++ 库封装为 addon。例如 sharp、canvas 等。 当然,你也可以仅仅因为不想重复造轮子,而将一个 C++ 库封装为 addon。
需要调用 Node.js 未封装的操作系统能力
如果你的 JS 程序需要调用一些操作系统上面的能力,而这些能力 Node.js 并没有帮你封装成标准库,这时候你就得自己写一个 addon,在 addon 里面用 C/C++ 代码去调相关的操作系统接口。
addon 生命周期介绍
开发者完成 addon 开发后,可以将其发布到各种仓库,供后续自己或其他开发者使用。
不同于纯 JS 模块,addon 模块中有 C/C++ 代码,必须编译后才能使用。addon 开发者可以只发布 C/C++ 源码,让它在用户 npm install 装包的时候自动进行编译构建;也可以把编译产物也一起发布,让用户侧省去编译构建的步骤。
如下图所示,是 addon 生命周期。
其中,预构建是个可选环节,是否使用取决于 addon 开发者根据特定 addon 自身情况的选择。 开发者可以选择提前编译构建出产物,以备后续随代码发布到 npm 仓库中。 如果没有预构建,addon 会在安装时调用构建工具本地构建。 所以安装没有预构建产物的 addon,需要环境中有必备的构建工具。
发布于:湖南省