node-gyp
node-gyp 是为 Node.js 编写的用于构建 原生插件(native addon)模块的、跨平台 的命令行工具。
它继承自 Chromium 团队先前使用的 gyp-next 项目,用以适应 Node.js 原生插件的不断发展。
node-gyp 虽然是用来构建 Node.js 原生模块的,但它并不用于构建 Node.js 本身。
安装 node-gyp 时不挑剔 Node.js 的版本,它会自动下载对应版本需要的文件。
Installation
npm i -g node-gyp
除此之外,还需要安装 Python 依赖、make 工具和 C/C++ 编译器工具链,不同的系统有不同的安装方式,参考 installation。
为 node-gyp 指定特定的版本
- 执行 node-gyp 命令时直接指定 python 的路径:
node-gyp <command> --python /path/to/executable/python
- 如果通过 npm 调用 node-gyp,可以配置 npm 的 python 路径:
npm config set python /path/to/executable/python
-
设置 PYTHON 环境变量,使其指向 python 的可执行程序路径。
-
设置 NODE_GYP_FORCE_PYTHON 环境变量强制 node-gyp 使用指定的 python 版本。
用于第三方运行时
第三方运行时(例如 Electron)与 Node.js 官方版本的配置存在差异,使用--dist-url
或者--nodedir
指定运行时的 headers。
当使用--dist-url
或者--nodedir
时,node-gyp 将使用特定的 headers(config.gypi)来生成构建配置,而默认情况下它使用的是 Node.js 运行时提供的process.config
对象。
旧版本的 Electron 可能在 headers 分发中使用了不规范的 cofig.gypi,此时可能需要使用--force-process-config
参数来解决配置错误。
怎么使用 node-gyp
原生插件本身就是一个项目(目录),要构建这个原生插件,我们先进入到原生插件的项目目录:
cd my_node_addon
使用 configure 子命令针对 当前的操作系统 生成构建文件:
node-gyp configure
这一步会读取当前目录下的 binding.gyp 文件,所以我们需要有一个 binding.gyp 文件。
Windows 系统上,可能还需要配置 Visual C++ 构建工具链(需要先安装):
node-gyp configure --msvs_version=2015
执行完配置命令后,会在 build/ 下生成 Makefile (on Unix) or vcxproj (on Windows) 文件。
调用构建命令:
node-gyp build
执行构建命令后,将按照构建的模式在 build/Release/ or build/Debug/ 目录下生成 .node 文件,这个文件就是我们需要的原生插件,可以在 Node.js 中被引入和调用。
binding.gyp 文件
binding.gyp 文件是位于插件项目根目录下的 JSON 文件,描述了怎么构建原生插件的配置。
一个能够用于构建插件的最精简的配置:
{
"target": [
{
"target_name": "binding",
"sources": [
"src/binding.cc"
]
}
]
}
评论区