在前面的文章中,很多东西都是手撸的,比如那个binding.gyp,其实还是有工具可用,下面我将介绍两款工具,可以辅助我们开发
这是一个生成器,可以帮助我们快速搭建项目,具体用法如下:
// 安装Yeoman
npm install -g yo
// 安装生成器
npm install -g generator-napi-module
// 创建一个项目目录,比如叫 hello,然后进入这个目录,运行yo命令生成工程
yo napi-module
// 运行后,会进入大家熟悉的npm init环节,填一些信息
// 上述指令会生成一个hello world级别的基本工程,如果要生成一个接近正式项目的,则可以带一个指令:--intermediate
完成后,大家就可以愉快的撸码了。
插件的发布和开发是同样重要的事情,由于别人使用你开发的插件,极有可能在他当前电脑上没有安装编译环境,所以有一种方法就是在开发电脑上编译好插件,别人引入你的库的时候,可以一起把编译好的插件下载下来直接使用。这样还可以避免一些node版本上的差异带来的问题,因为N-API是ABI的。
官方文档列出了三个工具,这些工具可以执行一些预构建的任务,大家根据喜好选择一个就行了,我选择了 prebuildify
// 安装
npm install -g prebuildify
// 在你的工程目录下,运行预构建
// --all 是构建所有二进制版本,如 electron、node
// 如果只需要构建node插件,则选择 --napi 即可
prebuildify --all --strip
// 接下来只有一件事需要做了,就是别人如果要使用你的插件,怎么找到插件这个二进制文件的事了
// prebuildify 有一个配套使用的工具 node-gyp-build
// 安装
npm install node-gyp-build
// 然后创建一个入口文件,我们就按约定俗成的,创建一个 index.js,放在当前工程的根目录下
// 按如下方式,就可以使用我们的插件了
const binding = require('node-gyp-build')(__dirname)
module.exports = binding
// 使用 node-gyp-build 的好处就是,别人引入你的插件,在加载时,它会智能的判断,如果已经有预构建
// 的插件,它会直接引入,否则会执行 node-gyp rebuild
// 查找的话,会在 prebuilds 目录下去寻找,按照不同的平台、架构来加载。(平台和架构,prebuildify 在预构建的时候,会自动创建相应的文件夹)