写成日期:2021/10/08 10:00 AM

原文地址:https://github.com/nodejs/node-gyp

node-gyp Node.js的原生插件构建工具

我是一个跨平台的命令行工具,在Node.js中使用,用于为Node.js编译原生插件模块。我包含了一个gyp-next的分叉(gyp-next之前由Chromium在使用),扩展用于支持Node.js原生插件的开发。

吭吭,我不是用于构建Node.js自身的工具。

我支持Node.js的很多很多版本,从0.8到4、5、6...,嗯嗯截止目前我都支持,放心使用。

我提供的功能

  • 在已经支持的任意平台上,使用同一种构建命令。

  • 兼容Node.js的不同版本

我如何安装

可以直接用 npm 进行安装:npm install -g node-gyp

根据我将运行的操作系统,还需要安装以下东西:

在Unix上

  • Python v3.6+

  • make

  • C/C++编译工具链,如GCC

在macOS上

如果系统升到了macOS Catalina(10.15+),需要单独看 macOS_Catalina.md

  • Python v3.6+

  • Xcode

    • 需要安装XCode命令行工具,xcode-select --install

    • 如果已经安装了完整的Xcode,要通过菜单 Xcode -> Open Developer Tool -> More Developer Tools,进行clang、clang++、make的安装

在Windows上

TODO

配置Python依赖

TODO

如何食用

第一步,进到需要编译的原生插件目录下,cd my_node_addon

第二步,生成一个适合当前系统平台的项目编译文件,node-gyp configure。在VC++2015上自动检测失败,需要手动添加指定,node-gyp configure --msvs_version=2015。配置步骤会在当前目录找到building.gyp文件,如何配置它见下面。

现在,build目录下会包含一个Makefile(在Unix上)或一个vcxproj(在Windows上)。

第三步,构建,node-gyp build

接下来会生成 .node 的绑定文件,编译后的绑定文件在 build/Debug 或 build/Release/ 中,这取决于构建的模式。Debug使用 --debug参数,重新进行 configure、build/rebuild。

现在,你可以通过 require 这个 .node 文件来运行你的测试了!

building.gyp 文件

它描述了待编译模块的配置,类JSON格式,它与package.json一块儿放在包的根目录下。

适用于构建Node.js插件的gyp示例:

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

扩展阅读

docs目录下包含一些额外的文档,描述了一些关于node-gyp的特定主题,可能对你进行安装或构建产生帮助。

一些非官方的写的不错的教程:

我有哪些命令

  • help,显示帮助文档

  • build,使用make/msbuild.exe构建原生插件

  • clean,移除build文件夹

  • configure,生成适配当前平台的项目构建文件

  • rebuild,执行clean、configure、build

  • install,安装给定版本的Node.js头文件

  • list,列出当前安装的Node.js头文件的版本

  • remove,移除给定版本的Node.js头文件

命令可选参数

  • -j n, --jobs n,并行运行make,取决于最大系统核心数

  • --target=v6.2.1,指定Node.js版本,默认使用process.version

  • --silly, --longlevel=silly,打印所有进度到控制台

  • --verbose, --loglevel=verbose,打印大多数进度到控制台

  • --silent, --loglevel=silent,不打印任何东西

  • debug, --dbueg,使用Debug构建,默认是Release

  • -C $dir, --directory=$dir,在不同的文件夹中跑命令

  • --make=$make,重写make命令,比如gmake

  • --thin=yes,使用精简静态库

  • --arch=$arch,设置目标架构,如 ia32

  • --tarball=$path,从本地tarball获取头文件

  • --devdir=$path,SDK下载目录,默认使用OS缓存目录

  • --ensure,如果头文件已经存在则不重新安装

  • --dist-url=$url,从自定义URL中下载头文件

  • --proxy=$url,设置HTTP(S)代理,用于下载header tarball

  • --noproxy=$urls,设置下载header tarball时需要忽略代理的URLs

  • --cafile=$cafile,重写默认的CA chain,用于下载header tarball

  • --nodedir=$path,设置node源码的路径

  • --python=$path,设置Python二进制的路径

  • --msvs_version=$version,设置Visual Studio版本(Windows专用)

  • --solution=$solution,设置Visual Studio Solution版本(Windows专用)

配置

环境变量

举例,将 devdir 设置为 /tmp/.gyp,

export npm_config_devdir=/tmp/.gypset npm_config_devdir=c:\temp\.gyp

npm配置

举例,将 devdir 设置为 /tmp/.gyp,

npm config set [--global] devdir /tmp/.gyp

许可证

MIT