node-gyp - Node.js 本地插件构建工具
<p><strong>翻译自:nodejs/node-gyp:Node.js native addon build tool</strong></p><h1 id="node-gyp---nodejs-本地插件构建工具"><code>node-gyp</code> - Node.js 本地插件构建工具</h1>
<p><code>node-gyp</code>是用Node.js编写的跨平台命令行工具,用于为Node.js编译本机插件。它包含<code>gyp-next</code>项目的供应商副本,该副本以前由Chromium团队使用,已扩展用来支持Node.js本机插件的开发。</p>
<p>请注意,<code>node-gyp</code>并不用于构建Node.js本身。</p>
<p>支持Node.js的多个目标版本(<code>0.8</code>,...,<code>4</code>、<code>5</code>、<code>6</code>等),无需顾及系统安装的版本(<code>node-gyp</code>会下载目标版本所需的开发文件或头文件)。</p>
<h2 id="特性">特性</h2>
<ul>
<li>各个受支持平台都使用相同的构建命令运行</li>
<li>支持不同的Node.js目标版本</li>
</ul>
<h2 id="安装">安装</h2>
<p>你可以使用<code>npm</code>安装<code>node-gyp</code>:</p>
<pre><code>npm install -g node-gyp
</code></pre>
<p>根据你的操作系统,你需要安装:</p>
<h3 id="在unix上">在Unix上</h3>
<ul>
<li>Python v2.7, v3.5, v3.6, v3.7, or v3.8</li>
<li><code>make</code></li>
<li>一个合适的C/C++编译器工具链,像GCC</li>
</ul>
<h3 id="在macos上">在macOS上</h3>
<p><strong>注意</strong>:如果你的Mac升级到macOS Catalina(10.15),请阅读macOS_Catalina.md.。</p>
<ul>
<li>Python v2.7, v3.5, v3.6, v3.7, or v3.8</li>
<li>Xcode
<ul>
<li>你需要通过运行<code>xcode-select --install</code>来安装<code>XCode Command Line Tools</code>(XCode 命令行工具)。或者,你已经安装了完整的Xcode,你可以在菜单<code>Xcode -> Open Developer Tool -> More Developer Tools...</code>(Xcode -> 打开开发者工具 -> 更多开发者工具...)下找到它们。此步骤将安装<code>clang</code>,<code>clang++</code>和<code>make</code>。</li>
</ul>
</li>
</ul>
<h3 id="在windows上">在Windows上</h3>
<p>从Microsoft Store软件包中安装最新版本的Python。</p>
<h4 id="选项1">选项1</h4>
<p>通过提升权限的PowerShell或CMD.exe(以管理员运行)来使用微软的windows-build-tools安装所有必需的工具和配置。<br>
<code>npm install --global --production windows-build-tools</code></p>
<h4 id="选项2">选项2</h4>
<p>安装工具并手动配置</p>
<ul>
<li>
<p>安装 Visual C++ 构建环境:Visual Studio Build Tools(使用“Visual C++ 构建工具”工作负载)或 Visual Studio 2017 Community(使用“C++桌面开发”工作负载)</p>
</li>
<li>
<p>启动<code>cmd</code>,<code>npm config set msvs_version 2017</code></p>
</li>
</ul>
<p>如果上述步骤对你没用,请访问微软的Windows Node.js指南以获取其他提示。</p>
<p>以本地 ARM 上的 Windows 10 上的 ARM64 Node.js 为目标,请添加“ARM64的Visuall C++ 编译器和库”和“ARM64的 Visual C++ ATL”组件。</p>
<h3 id="配置-python-依赖项">配置 Python 依赖项</h3>
<p><code>node-gyp</code>要求你安装以下其中一个兼容的Python版本: v2.7, v3.5, v3.6, v3.7, or v3.8。如果你安装了多个Python版本,你可以用以下方式之一确定一个<code>node-gyp</code>可以使用的Python版本</p>
<ol>
<li>通过设置<code>--python</code>命令行选项,例如:</li>
</ol>
<pre><code>node-gyp <command> --python /path/to/executable/python
</code></pre>
<ol start="2">
<li>如果用<code>npm</code>的方式调用<code>node-gyp</code>,并且你安装了多个版本的Python,那么你可以设置<code>npm</code>的'python'配置键为适当的值。</li>
</ol>
<pre><code>npm config set python /path/to/executable/python
</code></pre>
<ol start="3">
<li>如果<code>PYTHON</code>环境变量设置为一个Python可执行文件的路径,那么该版本将会被使用,如果它是一个兼容的版本的话。</li>
<li>如果将环境变量<code>NODE_GYP_FORCE_PYTHON</code>设置为Python可执行文件的路径,它将被用来代替其他所有已配置或内置Python搜索路径。如果它不是一个兼容版本,将不会完成进一步的搜索。</li>
</ol>
<h2 id="如何使用">如何使用</h2>
<p>要编译本地插件,首先转到它的根目录:</p>
<pre><code>cd my_node_addon
</code></pre>
<p>下一步是为当前平台生成合适的项目构建文件。为此使用下列命令:</p>
<pre><code>node-gyp configure
</code></pre>
<p>对Visual C++ Build Tools 2015自动侦测失败,所以需要添加<code>--msvs_version=2015</code>(用npm运行如上配置时不需要):</p>
<pre><code>node-gyp configure --msvs_version=2015
</code></pre>
<p><strong>注</strong>:<code>configure</code>这一步寻找了在当前目录的<code>binding.gyp</code>文件去处理。往下看以获取创建<code>binding.gyp</code>的指示。</p>
<p>现在你将会有<code>Makefile</code>(在Unix平台上)或者是在<code>build/</code>目录中的<code>vcxproj</code>文件(在Windows上)。接下来,调用<code>build</code>命令:</p>
<pre><code>node-gyp build
</code></pre>
<p>现在你有了你的已编译的<code>.node</code>捆绑文件!已编译的捆绑文件以<code>build/Debug/</code>还是以<code>build/Release/</code>结束,取决于构建模式。至此,您可以使用带有Node.js的<code>.node</code>文件并运行测试!<br>
<strong>注</strong>:创建捆绑文件的调试版本,当运行<code>configure</code>,<code>build</code>,或者<code>rebuild</code>命令时经过<code>--debug</code>(或者<code>-d</code>)开关。(通过<code>--debug</code>/<code>-d</code>开关运行<code>configure</code>,<code>build</code>,或者<code>rebuild</code>命令?)</p>
<h2 id="bindinggyp文件"><code>binding.gyp</code>文件</h2>
<p><code>binding.gyp</code>文件以类似于JSON的格式描述了构建模块的配置。这个文件和<code>package.json</code>都在包的根目录下。</p>
<p>一个适用于构建Node.js插件的准gyp文件应该长这样:</p>
<pre><code class="language-gyp">{
"targets": [
{
"target_name": "binding",
"sources": [ "src/binding.cc" ]
}
]
}
</code></pre>
<h2 id="延伸阅读">延伸阅读</h2>
<p>一些Node.js本地插件和编写<code>gyp</code>配置文件的补充资源:</p>
<ul>
<li>"Going Native" a nodeschool.io tutorial</li>
<li>"Hello World" node addon example</li>
<li>gyp user documentation</li>
<li>gyp input format reference</li>
<li>"binding.gyp" files out in the wild wiki page</li>
</ul>
<h2 id="commands命令">Commands(命令)</h2>
<p><code>node-gyp</code> 响应以下命令:</p>
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>help</code></td>
<td>显示帮助日志</td>
</tr>
<tr>
<td><code>build</code></td>
<td>调用<code>make</code>/<code>msbuild.exe</code>并且构建本地插件</td>
</tr>
<tr>
<td><code>clean</code></td>
<td>删除<code>build</code>目录,如果存在</td>
</tr>
<tr>
<td><code>configure</code></td>
<td>为当前平台生成项目构建文件</td>
</tr>
<tr>
<td><code>rebuild</code></td>
<td>连续运行<code>clean</code>,<code>configure</code>和<code>build</code></td>
</tr>
<tr>
<td><code>install</code></td>
<td>为给定版本安装Node.js头文件</td>
</tr>
<tr>
<td><code>list</code></td>
<td>列出当前已安装的Node.js头版本</td>
</tr>
<tr>
<td><code>remove</code></td>
<td>为给定版本移除Node.js头文件</td>
</tr>
</tbody>
</table>
<h2 id="command-options命令项">Command Options(命令项)</h2>
<p><code>node-gyp</code>接受以下命令选项:</p>
<table>
<thead>
<tr>
<th>命令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>-j n</code>,<code>--jobs n</code></td>
<td>并行运行<code>make</code>。<code>max</code>值将使用所有可用的CPU内核</td>
</tr>
<tr>
<td><code>--target=v6.2.1</code></td>
<td>要为其构建的Node.js版本(默认为<code>process.version</code>)</td>
</tr>
<tr>
<td><code>--silly</code>,<code>--loglevel=silly</code></td>
<td>记录所有进度到控制台</td>
</tr>
<tr>
<td><code>--verbose</code>,<code>--loglevel=verbose</code></td>
<td>记录大部分进度到控制台</td>
</tr>
<tr>
<td><code>--silent</code>,<code>--loglevel=silent</code></td>
<td>不记录任何东西进行控制台</td>
</tr>
<tr>
<td><code>debug</code>,<code>--debug</code></td>
<td>进行调试构建(默认为<code>Release</code>)</td>
</tr>
<tr>
<td><code>--release</code>, <code>--no-debug</code></td>
<td>制作发布版本</td>
</tr>
<tr>
<td><code>-C $dir</code>, <code>--directory=$dir</code></td>
<td>在不同的目录运行命令</td>
</tr>
<tr>
<td><code>--make=$make</code></td>
<td>复盖<code>make</code>命令(e.g. gmake)</td>
</tr>
<tr>
<td><code>--thin=yes</code></td>
<td>启用精简数据库</td>
</tr>
<tr>
<td><code>--arch=$arch</code></td>
<td>设置目标架构(例如ia32)</td>
</tr>
<tr>
<td><code>--tarball=$path</code></td>
<td>从本地压缩包获取标头</td>
</tr>
<tr>
<td><code>--devdir=$path</code></td>
<td>SDK下载目录(默认是操作系统缓存目录)</td>
</tr>
<tr>
<td><code>--ensure</code></td>
<td>如果已经存在,不重装头文件</td>
</tr>
<tr>
<td><code>-dist-url=$url</code></td>
<td>从自定义网址下载标题压缩包</td>
</tr>
<tr>
<td><code>--proxy=$url</code></td>
<td>设置HTTP(S)代理以下载标头压缩包</td>
</tr>
<tr>
<td><code>--noproxy=$urls</code></td>
<td>设置网址以在下载标头压缩包时忽略代理</td>
</tr>
<tr>
<td><code>--cafile=$cafile</code></td>
<td>覆盖默认的CA链(下载压缩包)</td>
</tr>
<tr>
<td><code>--nodedir=$path</code></td>
<td>设置节点源代码的路径</td>
</tr>
<tr>
<td><code>--python=$path</code></td>
<td>设置Python二进制文件的路径</td>
</tr>
<tr>
<td><code>--msvs_version=$version</code></td>
<td>设置Visual Studio版本(仅Windows)</td>
</tr>
<tr>
<td><code>--solution=$solution</code></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="配置">配置</h2>
<h3 id="环境变量">环境变量</h3>
<p>将格式<code>npm_config_OPTION_NAME</code>用于上面列出的任何命令选项(选项名称中的短划线应替换为下划线)。</p>
<p>例如,例如,要将<code>devdir</code>设置为<code>/tmp/.gyp</code>,您将:<br>
在Unix上运行:</p>
<pre><code>export npm_config_devdir=/tmp/.gyp
</code></pre>
<p>或者在Windows上运行:</p>
<pre><code>set npm_config_devdir=c:\temp\.gyp
</code></pre>
<h3 id="npm配置"><code>npm</code>配置</h3>
<p>将格式<code>OPTION_NAME</code>用于上面列出的任何命令选项。</p>
<p>例如,要将<code>devdir</code>设置为<code>/tmp/.gyp</code>,可以运行:</p>
<pre><code>npm config set [--global] devdir /tmp/.gyp
</code></pre>
<p><strong>注</strong>:通过<code>npm</code>设置的配置仅在当<code>node-gyp</code>通过<code>npm</code>运行时使用,不是直接运行<code>node-gyp</code>。</p>
<h2 id="证书">证书</h2>
<p><code>node-gyp</code>在MIT证书下可用。详情见证书文件</p>
</div>
<div id="MySignature" role="contentinfo">
<div>
<p>本文来自博客园,作者:木氷,转载请注明原文链接:https://www.cnblogs.com/kihyou/p/13543156.html</p>
</div><br><br>
来源:https://www.cnblogs.com/kihyou/p/13543156.html
頁:
[1]