node-gyp - Node.js 本地插件构建工具
翻译自:nodejs/node-gyp:Node.js native addon build tool
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
:
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搜索路径。如果它不是一个兼容版本,将不会完成进一步的搜索。
如何使用
要编译本地插件,首先转到它的根目录:
cd my_node_addon
下一步是为当前平台生成合适的项目构建文件。为此使用下列命令:
node-gyp configure
对Visual C++ Build Tools 2015自动侦测失败,所以需要添加--msvs_version=2015
(用npm运行如上配置时不需要):
node-gyp configure --msvs_version=2015
注:configure
这一步寻找了在当前目录的binding.gyp
文件去处理。往下看以获取创建binding.gyp
的指示。
现在你将会有Makefile
(在Unix平台上)或者是在build/
目录中的vcxproj
文件(在Windows上)。接下来,调用build
命令:
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文件应该长这样:
{
"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上运行:
export npm_config_devdir=/tmp/.gyp
或者在Windows上运行:
set npm_config_devdir=c:\temp\.gyp
npm
配置
将格式OPTION_NAME
用于上面列出的任何命令选项。
例如,要将devdir
设置为/tmp/.gyp
,可以运行:
npm config set [--global] devdir /tmp/.gyp
注:通过npm
设置的配置仅在当node-gyp
通过npm
运行时使用,不是直接运行node-gyp
。
证书
node-gyp
在MIT证书下可用。详情见证书文件