node-gyp---Node.js的原生插件构建工具
<p>写成日期:2021/10/08 10:00 AM</p><p>原文地址:https://github.com/nodejs/node-gyp</p>
<h1 id="node-gyp-nodejs的原生插件构建工具">node-gyp Node.js的原生插件构建工具</h1>
<p>我是一个跨平台的命令行工具,在Node.js中使用,用于为Node.js编译原生插件模块。我包含了一个gyp-next的分叉(gyp-next之前由Chromium在使用),扩展用于支持Node.js原生插件的开发。</p>
<p>吭吭,我不是用于构建Node.js自身的工具。</p>
<p>我支持Node.js的很多很多版本,从0.8到4、5、6...,嗯嗯截止目前我都支持,放心使用。</p>
<h2 id="我提供的功能">我提供的功能</h2>
<ul>
<li>
<p>在已经支持的任意平台上,使用同一种构建命令。</p>
</li>
<li>
<p>兼容Node.js的不同版本</p>
</li>
</ul>
<h2 id="我如何安装">我如何安装</h2>
<p>可以直接用 npm 进行安装:<code>npm install -g node-gyp</code></p>
<p>根据我将运行的操作系统,还需要安装以下东西:</p>
<h3 id="在unix上">在Unix上</h3>
<ul>
<li>
<p>Python v3.6+</p>
</li>
<li>
<p>make</p>
</li>
<li>
<p>C/C++编译工具链,如GCC</p>
</li>
</ul>
<h3 id="在macos上">在macOS上</h3>
<p>如果系统升到了macOS Catalina(10.15+),需要单独看 macOS_Catalina.md。</p>
<ul>
<li>
<p>Python v3.6+</p>
</li>
<li>
<p>Xcode</p>
<ul>
<li>
<p>需要安装XCode命令行工具,<code>xcode-select --install</code></p>
</li>
<li>
<p>如果已经安装了完整的Xcode,要通过菜单 Xcode -> Open Developer Tool -> More Developer Tools,进行clang、clang++、make的安装</p>
</li>
</ul>
</li>
</ul>
<h3 id="在windows上">在Windows上</h3>
<p>TODO</p>
<h3 id="配置python依赖">配置Python依赖</h3>
<p>TODO</p>
<h2 id="如何食用">如何食用</h2>
<p>第一步,进到需要编译的原生插件目录下,<code>cd my_node_addon</code></p>
<p>第二步,生成一个适合当前系统平台的项目编译文件,<code>node-gyp configure</code>。在VC++2015上自动检测失败,需要手动添加指定,<code>node-gyp configure --msvs_version=2015</code>。配置步骤会在当前目录找到building.gyp文件,如何配置它见下面。</p>
<p>现在,build目录下会包含一个Makefile(在Unix上)或一个vcxproj(在Windows上)。</p>
<p>第三步,构建,<code>node-gyp build</code></p>
<p>接下来会生成 .node 的绑定文件,编译后的绑定文件在 build/Debug 或 build/Release/ 中,这取决于构建的模式。Debug使用 --debug参数,重新进行 configure、build/rebuild。</p>
<p>现在,你可以通过 require 这个 .node 文件来运行你的测试了!</p>
<h2 id="buildinggyp-文件">building.gyp 文件</h2>
<p>它描述了待编译模块的配置,类JSON格式,它与package.json一块儿放在包的根目录下。</p>
<p>适用于构建Node.js插件的gyp示例:</p>
<pre><code class="language-json">{
"targets": [
{
"target_name": "binding",
"sources": [ "src/binding.cc" ]
}
]
}
</code></pre>
<h2 id="扩展阅读">扩展阅读</h2>
<p>docs目录下包含一些额外的文档,描述了一些关于node-gyp的特定主题,可能对你进行安装或构建产生帮助。</p>
<p>一些非官方的写的不错的教程:</p>
<ul>
<li>
<p>"Going Native" a nodeschool.io tutorial</p>
</li>
<li>
<p>"Hello World" node addon example</p>
</li>
<li>
<p>gyp user documentation</p>
</li>
<li>
<p>gyp input format reference</p>
</li>
<li>
<p>"binding.gyp" files out in the wild wiki page </p>
</li>
</ul>
<h2 id="我有哪些命令">我有哪些命令</h2>
<ul>
<li>
<p>help,显示帮助文档</p>
</li>
<li>
<p>build,使用make/msbuild.exe构建原生插件</p>
</li>
<li>
<p>clean,移除build文件夹</p>
</li>
<li>
<p>configure,生成适配当前平台的项目构建文件</p>
</li>
<li>
<p>rebuild,执行clean、configure、build</p>
</li>
<li>
<p>install,安装给定版本的Node.js头文件</p>
</li>
<li>
<p>list,列出当前安装的Node.js头文件的版本</p>
</li>
<li>
<p>remove,移除给定版本的Node.js头文件</p>
</li>
</ul>
<h2 id="命令可选参数">命令可选参数</h2>
<ul>
<li>
<p><code>-j n, --jobs n</code>,并行运行make,取决于最大系统核心数</p>
</li>
<li>
<p><code>--target=v6.2.1</code>,指定Node.js版本,默认使用process.version</p>
</li>
<li>
<p><code>--silly, --longlevel=silly</code>,打印所有进度到控制台</p>
</li>
<li>
<p><code>--verbose, --loglevel=verbose</code>,打印大多数进度到控制台</p>
</li>
<li>
<p><code>--silent, --loglevel=silent</code>,不打印任何东西</p>
</li>
<li>
<p><code>debug, --dbueg</code>,使用Debug构建,默认是Release</p>
</li>
<li>
<p><code>-C $dir, --directory=$dir</code>,在不同的文件夹中跑命令</p>
</li>
<li>
<p><code>--make=$make</code>,重写make命令,比如gmake</p>
</li>
<li>
<p><code>--thin=yes</code>,使用精简静态库</p>
</li>
<li>
<p><code>--arch=$arch</code>,设置目标架构,如 ia32</p>
</li>
<li>
<p><code>--tarball=$path</code>,从本地tarball获取头文件</p>
</li>
<li>
<p><code>--devdir=$path</code>,SDK下载目录,默认使用OS缓存目录</p>
</li>
<li>
<p><code>--ensure</code>,如果头文件已经存在则不重新安装</p>
</li>
<li>
<p><code>--dist-url=$url</code>,从自定义URL中下载头文件</p>
</li>
<li>
<p><code>--proxy=$url</code>,设置HTTP(S)代理,用于下载header tarball</p>
</li>
<li>
<p><code>--noproxy=$urls</code>,设置下载header tarball时需要忽略代理的URLs</p>
</li>
<li>
<p><code>--cafile=$cafile</code>,重写默认的CA chain,用于下载header tarball</p>
</li>
<li>
<p><code>--nodedir=$path</code>,设置node源码的路径</p>
</li>
<li>
<p><code>--python=$path</code>,设置Python二进制的路径</p>
</li>
<li>
<p><code>--msvs_version=$version</code>,设置Visual Studio版本(Windows专用)</p>
</li>
<li>
<p><code>--solution=$solution</code>,设置Visual Studio Solution版本(Windows专用)</p>
</li>
</ul>
<h2 id="配置">配置</h2>
<h3 id="环境变量">环境变量</h3>
<p>举例,将 devdir 设置为 /tmp/.gyp,</p>
<p><code>export npm_config_devdir=/tmp/.gyp</code> 或 <code>set npm_config_devdir=c:\temp\.gyp</code></p>
<h3 id="npm配置">npm配置</h3>
<p>举例,将 devdir 设置为 /tmp/.gyp,</p>
<p><code>npm config set [--global] devdir /tmp/.gyp</code></p>
<h2 id="许可证">许可证</h2>
<p>MIT</p><br><br>
来源:https://www.cnblogs.com/hencins/p/15379546.html
頁:
[1]