node-gyp - Node.js 本地插件构建工具
node-gyp是用Node.js编写的跨平台命令行工具,用于为Node.js编译本机插件。它包含gyp-next项目的供应商副本,该副本以前由Chromium团队使用,已扩展用来支持Node.js本机插件的开发。
请注意,node-gyp并不用于构建Node.js本身。
支持Node.js的多个目标版本(0.8,...,4、5、6等),无需顾及系统安装的版本(node-gyp会下载目标版本所需的开发文件或头文件)。
特性
- 各个受支持平台都使用相同的构建命令运行
- 支持不同的Node.js目标版本
安装
你可以使用npm安装node-gyp:
代码语言:javascript复制npm install -g node-gyp
根据你的操作系统,你需要安装:
在Unix上
- Python v2.7, v3.5, v3.6, v3.7, or v3.8
- make
- 一个合适的C/C 编译器工具链,像GCC
在macOS上
注意:如果你的Mac升级到macOS Catalina(10.15),请阅读macOS_Catalina.md.。
- Python v2.7, v3.5, v3.6, v3.7, or v3.8
- Xcode
- 你需要通过运行xcode-select --install来安装XCode Command Line Tools(XCode 命令行工具)。或者,你已经安装了完整的Xcode,你可以在菜单Xcode -> Open Developer Tool -> More Developer Tools...(Xcode -> 打开开发者工具 -> 更多开发者工具...)下找到它们。此步骤将安装clang,clang 和make。
在Windows上
从Microsoft Store软件包中安装最新版本的Python。
选项1
通过提升权限的PowerShell或CMD.exe(以管理员运行)来使用微软的windows-build-tools安装所有必需的工具和配置。 npm install --global --production windows-build-tools
选项2
安装工具并手动配置
- 安装 Visual C 构建环境:Visual Studio Build Tools(使用“Visual C 构建工具”工作负载)或 Visual Studio 2017 Community(使用“C 桌面开发”工作负载)
- 启动cmd,npm config set msvs_version 2017
如果上述步骤对你没用,请访问微软的Windows Node.js指南以获取其他提示。
以本地 ARM 上的 Windows 10 上的 ARM64 Node.js 为目标,请添加“ARM64的Visuall C 编译器和库”和“ARM64的 Visual C ATL”组件。
配置 Python 依赖项
node-gyp要求你安装以下其中一个兼容的Python版本: v2.7, v3.5, v3.6, v3.7, or v3.8。如果你安装了多个Python版本,你可以用以下方式之一确定一个node-gyp可以使用的Python版本
- 通过设置--python命令行选项,例如:
node-gyp <command> --python /path/to/executable/python
- 如果用npm的方式调用node-gyp,并且你安装了多个版本的Python,那么你可以设置npm的'python'配置键为适当的值。
npm config set python /path/to/executable/python
- 如果PYTHON环境变量设置为一个Python可执行文件的路径,那么该版本将会被使用,如果它是一个兼容的版本的话。
- 如果将环境变量NODE_GYP_FORCE_PYTHON设置为Python可执行文件的路径,它将被用来代替其他所有已配置或内置Python搜索路径。如果它不是一个兼容版本,将不会完成进一步的搜索。
如何使用
要编译本地插件,首先转到它的根目录:
代码语言:javascript复制cd my_node_addon
下一步是为当前平台生成合适的项目构建文件。为此使用下列命令:
代码语言:javascript复制node-gyp configure
对Visual C Build Tools 2015自动侦测失败,所以需要添加--msvs_version=2015(用npm运行如上配置时不需要):
代码语言:javascript复制node-gyp configure --msvs_version=2015
注:configure这一步寻找了在当前目录的binding.gyp文件去处理。往下看以获取创建binding.gyp的指示。
现在你将会有Makefile(在Unix平台上)或者是在build/目录中的vcxproj文件(在Windows上)。接下来,调用build命令:
代码语言:javascript复制node-gyp build
现在你有了你的已编译的.node捆绑文件!已编译的捆绑文件以build/Debug/还是以build/Release/结束,取决于构建模式。至此,您可以使用带有Node.js的.node文件并运行测试! 注:创建捆绑文件的调试版本,当运行configure,build,或者rebuild命令时经过--debug(或者-d)开关。(通过--debug/-d开关运行configure,build,或者rebuild命令?)
binding.gyp文件
binding.gyp文件以类似于JSON的格式描述了构建模块的配置。这个文件和package.json都在包的根目录下。
一个适用于构建Node.js插件的准gyp文件应该长这样:
代码语言:javascript复制{
"targets": [
{
"target_name": "binding",
"sources": [ "src/binding.cc" ]
}
]
}
延伸阅读
一些Node.js本地插件和编写gyp配置文件的补充资源:
- "Going Native" a nodeschool.io tutorial
- "Hello World" node addon example
- gyp user documentation
- gyp input format reference
- "binding.gyp" files out in the wild wiki page
Commands(命令)
node-gyp 响应以下命令:
help | 显示帮助日志 |
---|---|
build | 调用make/msbuild.exe并且构建本地插件 |
clean | 删除build目录,如果存在 |
configure | 为当前平台生成项目构建文件 |
rebuild | 连续运行clean,configure和build |
install | 为给定版本安装Node.js头文件 |
list | 列出当前已安装的Node.js头版本 |
remove | 为给定版本移除Node.js头文件 |
Command Options(命令项)
node-gyp接受以下命令选项:
-j n,--jobs n | 并行运行make。max值将使用所有可用的CPU内核 |
---|---|
--target=v6.2.1 | 要为其构建的Node.js版本(默认为process.version) |
--silly,--loglevel=silly | 记录所有进度到控制台 |
--verbose,--loglevel=verbose | 记录大部分进度到控制台 |
--silent,--loglevel=silent | 不记录任何东西进行控制台 |
debug,--debug | 进行调试构建(默认为Release) |
--release, --no-debug | 制作发布版本 |
-C $dir, --directory=$dir | 在不同的目录运行命令 |
--make=$make | 复盖make命令(e.g. gmake) |
--thin=yes | 启用精简数据库 |
--arch=$arch | 设置目标架构(例如ia32) |
--tarball=$path | 从本地压缩包获取标头 |
--devdir=$path | SDK下载目录(默认是操作系统缓存目录) |
--ensure | 如果已经存在,不重装头文件 |
-dist-url=$url | 从自定义网址下载标题压缩包 |
--proxy=$url | 设置HTTP(S)代理以下载标头压缩包 |
--noproxy=$urls | 设置网址以在下载标头压缩包时忽略代理 |
--cafile=$cafile | 覆盖默认的CA链(下载压缩包) |
--nodedir=$path | 设置节点源代码的路径 |
--python=$path | 设置Python二进制文件的路径 |
--msvs_version=$version | 设置Visual Studio版本(仅Windows) |
--solution=$solution |
配置
环境变量
将格式npm_config_OPTION_NAME用于上面列出的任何命令选项(选项名称中的短划线应替换为下划线)。
例如,例如,要将devdir设置为/tmp/.gyp,您将: 在Unix上运行:
代码语言:javascript复制export npm_config_devdir=/tmp/.gyp
或者在Windows上运行:
代码语言:javascript复制set npm_config_devdir=c:temp.gyp
npm配置
将格式OPTION_NAME用于上面列出的任何命令选项。
例如,要将devdir设置为/tmp/.gyp,可以运行:
代码语言:javascript复制npm config set [--global] devdir /tmp/.gyp
注:通过npm设置的配置仅在当node-gyp通过npm运行时使用,不是直接运行node-gyp。
证书
node-gyp在MIT证书下可用。详情见证书文件