写成日期: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/.gyp
或 set npm_config_devdir=c: emp.gyp
npm配置
举例,将 devdir 设置为 /tmp/.gyp,
npm config set [--global] devdir /tmp/.gyp
许可证
MIT