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,...,456等),无需顾及系统安装的版本(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 -> 打开开发者工具 -> 更多开发者工具...)下找到它们。此步骤将安装clangclang++make

在Windows上

Microsoft Store软件包中安装最新版本的Python。

选项1

通过提升权限的PowerShell或CMD.exe(以管理员运行)来使用微软的windows-build-tools安装所有必需的工具和配置。
npm install --global --production windows-build-tools

选项2

安装工具并手动配置

如果上述步骤对你没用,请访问微软的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版本

  1. 通过设置--python命令行选项,例如:
node-gyp <command> --python /path/to/executable/python
  1. 如果用npm的方式调用node-gyp,并且你安装了多个版本的Python,那么你可以设置npm的'python'配置键为适当的值。
npm config set python /path/to/executable/python
  1. 如果PYTHON环境变量设置为一个Python可执行文件的路径,那么该版本将会被使用,如果它是一个兼容的版本的话。
  2. 如果将环境变量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文件并运行测试!
:创建捆绑文件的调试版本,当运行configurebuild,或者rebuild命令时经过--debug(或者-d)开关。(通过--debug/-d开关运行configurebuild,或者rebuild命令?)

binding.gyp文件

binding.gyp文件以类似于JSON的格式描述了构建模块的配置。这个文件和package.json都在包的根目录下。

一个适用于构建Node.js插件的准gyp文件应该长这样:

{
  "targets": [
    {
      "target_name": "binding",
      "sources": [ "src/binding.cc" ]
    }
  ]
}

延伸阅读

一些Node.js本地插件和编写gyp配置文件的补充资源:

Commands(命令)

node-gyp 响应以下命令:

命令 描述
help 显示帮助日志
build 调用make/msbuild.exe并且构建本地插件
clean 删除build目录,如果存在
configure 为当前平台生成项目构建文件
rebuild 连续运行clean,configurebuild
install 为给定版本安装Node.js头文件
list 列出当前已安装的Node.js头版本
remove 为给定版本移除Node.js头文件

Command Options(命令项)

node-gyp接受以下命令选项:

命令 描述
-j n,--jobs n 并行运行makemax值将使用所有可用的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证书下可用。详情见证书文件

posted @ 2020-08-22 19:50  木氷  阅读(23161)  评论(0编辑  收藏  举报