node-gyp是用Node.js编写的跨平台命令行工具,用于为Node.js编译本机插件

2023-08-23 16:24:04 浏览数 (2)

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版本

  1. 通过设置--python命令行选项,例如:
代码语言:javascript复制
node-gyp <command> --python /path/to/executable/python
  1. 如果用npm的方式调用node-gyp,并且你安装了多个版本的Python,那么你可以设置npm的'python'配置键为适当的值。
代码语言:javascript复制
npm config set python /path/to/executable/python
  1. 如果PYTHON环境变量设置为一个Python可执行文件的路径,那么该版本将会被使用,如果它是一个兼容的版本的话。
  2. 如果将环境变量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证书下可用。详情见证书文件

0 人点赞