让Node-gyp在Windows 10上运行

时间:2018-05-11 06:16:33

标签: node.js node-gyp

我只是在学习windows上的nodejs。似乎node-gyp包的设置非常痛苦。我在网上尝试了很多指南,但我觉得我在玩一个猜谜游戏。 Windows版本很新鲜,只有一个星期左右。

官方网页(https://github.com/nodejs/node-gyp)说:

(尝试采用最不复杂的路径)

npm install -g node-gyp

npm install --global --production windows-build-tools

If the above didn't work" go to https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules

如果我只是运行 node-gyp ,我会

找不到模块:

'C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node_modules \ node-gyp \ bin \ node-gyp.js'(etc)。即使该文件存在。

我甚至尝试卸载节点,清除%appdata%缓存等并删除其他内容。

如果我尝试安装依赖于node-gyp的东西,我得到:

.. \ src \ ursaNative.cc(157):警告C4244 :(等)..

ERR!堆栈错误:msbuild失败并退出代码:1 gyp ERR!在ChildProcess.onExit堆栈(C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ build.js:258:23)

我花了很多时间 - 我无法相信这是多么痛苦。

我有

任何想法从哪里开始?

5 个答案:

答案 0 :(得分:3)

您的node-gyp模块是从NPM初始化的,但很可能它的正确路径没有添加到系统中的环境变量中,只需将其添加到系统变量即可。检查路径变量是否有" C:// Users / abc / AppData / Roaming / npm "如果没有,请添加它。

还要检查python是否已添加到您的环境变量中。

干杯!

答案 1 :(得分:3)

这篇文章试图通过覆盖先前的安装并从{{1}开始将node-gypNode.js升级到v5.X来为v12.X进行正确的设置1}}。

当您已经有一个node-gyp环境并安装了一个或多个Visual Studio版本时,错过某些步骤似乎很容易。

我将在这里尝试综合适用于我的步骤。

上下文

根据配置,在以下详细信息:

+-------+-----------------------------+-------------+-------------------------------------+
|       | Component                   | Name        | Version                             |
+-------+-----------------------------+-------------+-------------------------------------+
| (1)   | Platform                    | Windows 10  | NT 10.0.18362                       |
| (2)   | Target run-time environment | Node.js     | v12.16.1                            |
| (3)   | Packet Manager              | npm         | v6.13.4                             |
| (4)   | CLI Toolchain for compiling | node-gyp    | v6.0.1                              |
| (4.a) | Compiler Language           | Python      | v2.7.0                              |
| (4.b) | Project Builder             | MSBuild.exe | Microsoft (R) Build Engine for .NET |
|       |                             |             | version 16.2.32702+c4012a063        |
|       |                             |             | 16.200.19.32702                     |
+-------+-----------------------------+-------------+-------------------------------------+

指南

您可能已经完成了此处概述的一些步骤。如果您遇到了某些问题,则可以通过详细查看以下步骤来确定出问题的阶段:

参考

    GitHub上的
  1. PythonREADME.md G 启用 Y 我们的 P 项目)
  2. A Comprehensive Guide to Fixing Node-Gyp Issues on Windows(作者:Joe Bustamante; 2019年3月27日)
  3. Setting up None.js on Windows 10(FerencHámori撰写; 2016年5月17日)
  4. Using Python on Windows(官方文档)

(1)Node.js

本指南假定您的计算机中已经安装了node-gyp(无论如何,您都将找到Windows here的安装程序)。

  • 安装gitdownload您平台的最新LTS版本(Windows Installer Node.js应该可以运行)

要验证其是否已正确安装,请在测试文件夹中添加具有以下.msi代码:test.js的文件javascript,并在终端运行中console.log("Node is installed!");。应该提示您node test.js

(2)npm

    使用Node is installed!软件包将npm升级到最新的稳定版本

以管理员身份运行PowerShell终端:

npm-windows-upgrade

将提示您选择一个版本。选项中可用的最大版本应该没问题。

如果您错过了此软件包,则可能要按照GitHub repository中概述的步骤按照说明进行安装,该步骤主要是在以管理员身份运行的PowerShell控制台中键入以下内容:

PS C:\WINDOWS\system32> nmp-windows-upgrade

(3)Visual Studio

如果您已经安装了PS C:\WINDOWS\system32> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force PS C:\WINDOWS\system32> npm install --global --production npm-windows-upgrade PS C:\WINDOWS\system32> npm-windows-upgrade ,则可以跳过此步骤,除非您还希望升级到最新版本。

在某些帖子中,您可能已经读到,在安装Visual Studio之后,只需使用以下命令行即可完成此步骤:

node-gyp

但是,您可以选择通过其他方式实现这一目标:

  1. 您可能已经安装了npm install --global --production windows-build-tools --vs2015 ,并且只想配置Visual Studio来使用它
  2. 您可能希望单独安装node-gyp,然后再配置Visual Studio来使用它

这完全取决于您。在本指南的稍后阶段,我们将逐步完成将node-gyp配置为使用特定node-gyp版本的步骤。

(4)Python

Visual StudioGitHub official repo)的安装指南中指定了node-gyp的哪些版本当前与 Unix 上的最新Python版本兼容和 macOS 但是 Windows 平台(截至2020年3月1日)进行解释。

尽管目前缺乏文档,但通过查看其他用户对此的问题,可以假设在Windows平台上,node-gyp仅支持node-gyp Python reference)。

  • download Python 2.7.X here:您可以选择在开头带有可用链接注明的错误修正版本。
  • 进行常规安装,并记下该文件夹(最好是在拥有所有python版本的公共文件夹中)

(5)node-gyp

现在是正确设置v2.7.X配置的时候了。

如果尚未安装它:

node-gyp

(5.1)设置npm install --global node-gyp 版本

根据文档:

如果将环境变量NODE_GYP_FORCE_PYTHON设置为Python可执行文件的路径,则将使用它代替任何其他已配置或内置的Python搜索路径。如果不是兼容版本,将不会进行进一步的搜索。

  1. 标识Python文件的完整路径(通过完整路径表示全部:文件夹路径 + 目标)文件C:\full_path\Python2.7.X\python.exe
  2. 转到控制面板-> 系统,然后打开高级系统设置,然后选择高级
  3. 在底部,单击按钮python.exe
  4. 弹出一个新面板,其中有两个大部分:用户变量(仅适用于流程所有者)和系统变量(适用于所有流程)
  5. 系统变量上,创建一个Environmental Variables...条目
  6. 将其命名为New,并使用python.exe文件版本NODE_GYP_FORCE_PYTHON完整路径作为值,然后单击2.7.X,即可完成操作
    • 要使该变量在PowerShell终端环境中可用,您需要将其关闭并重新打开一个新终端
  7. 您刚刚修复了系统中用于OK的{​​{1}}版本

或者,您可以使用以下命令行:

python

(5.2)设置node-gyp版本

这一步应该很容易:

  1. 标识您的npm config set python /path/to/executable/python 版本(即2015年,2017年,2019年)的 Visual Studio Build Tools
  2. 在以下命令行的 year 部分中
  3. 使用它:
year

例如,如果您希望它使用MSBuild of 2019,请使用以下命令:

Visual Studio

那一定已经做到了。

(6)通过在npm config set msvs_version year 中创建一个简单的附件来测试node-gyp

参考

  1. Mastering Node.js: Build robust and scalable real-time server-side web(由Sandro Pasquali和Kevin Faaborg撰写,2017年,Packt Publishing):此处的改编示例
  2. C++ Addons(官方文档)
  3. V8 Embed(有关npm config set msvs_version 2019 如何嵌入C++中的说明)
  4. V8 C++
  5. V8::FunctinonCallbackInfo Class Template参考

动手

Node.js文件夹中,使用以下文件创建v12.0子文件夹:

  • test(我们的源代码test\hello_module本机代码)
  • hello_module\hello.ccC++的说明文件)
  • hello_module\binding.gyp(包装器)

在终端中,通过node-gyp 初始化包。您只需在所有按钮中按hello_module\index.js即可选择提供的默认值:

npm ini

现在用以下指定的内容填充文件。请结束Enter,因为我们将在使用前进行编译。


test\hello_module> npm ini 文件内容:

index.js

hello.cc 文件内容:

#include <node.h>

namespace hello_module {
  using v8::FunctionCallbackInfo;
  using v8::Isolate;
  using v8::Local;
  using v8::Object;
  using v8::String;
  using v8::Value;

  void sayHello(const FunctionCallbackInfo<Value>& args) {
    Isolate* isolate = args.GetIsolate();
    args.GetReturnValue().Set(String::NewFromUtf8(isolate, "Hello World!"));
  }

  // the initialization function for hello_module
  void init(Local<Object> exports) {
    NODE_SET_METHOD(exports, "sayHello", sayHello);
  }

  // node.h C++ macro to export the initialization function
  // (macros should not end by semicolon)
  NODE_MODULE(NODE_GYP_MODULE_NAME, init)
}

您可以保留binding.gyp文件作为结尾。

现在,让我们构建项目

{
  "targets": [
    {
      "target_name": "hello",
      "sources": [ "hello.cc" ]
    }
  ]
}

应该使用基本项目文件创建index.js文件夹,以编译test\hello_module> node-gyp configure gyp info it worked if it ends with ok gyp info using node-gyp@6.1.0 gyp info using node@12.16.1 | win32 | x64 gyp info find Python using Python version 2.7.0 found at "C:\python\2.7.0\python.exe" gyp info find VS using VS2019 (16.2.29123.88) found at: gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community" # .. omited .. # gyp info ok 解决方案(test\hello_module\build的主要目的是:可以使用任何{{1} }编译器,而不必使用C++;在这种情况下为node-gyp)。

现在,让我们构建插件

C++

在两个命令的结尾,您都应该阅读GUI以了解一切正常(由于蓝色背景,您可能无法在PowerShell终端上看到它;如果是这样,则可以编辑 Properties ,然后将屏幕背景更改为黑色)。

该命令应该已经使用Visual Studio文件创建了test\hello_module> node-gyp build 文件夹。

注释

  1. 如果一切顺利,gyp info ok ,则完成了test\hello_module\build\Release的安装验证:它可以正常工作!
    • 一旦您有了这个简单的附加组件,就可以解决某些软件包的问题,​​这些问题可能与该软件包本身或某些软件包相关,但您的hello.nodeok配置没问题
  2. 如果在构建过程中遇到问题,则可以使用文档来解决问题的根源,或者打开新的帖子以指定遇到的错误,并且有人可以提供帮助

(7)在node-gyp中包装并使用插件

这是一个额外的步骤。您可能已经来到这里了,为什么要这样离开呢?

现在让我们编写包装 node 文件:

node-gyp

然后在C++文件夹中,创建使用我们的插件的 hello_module\index.js 文件:

const helloAddon = require('./build/Release/hello.node');
module.exports = helloAddon;

在终端机中:

test

您应该在屏幕上看到提示test\hello_world.js

希望这可以帮助任何有问题的人找出const {sayHello} = require('./hello_module'); console.log(sayHello()) 的配置在哪些方面不能满足要求。

答案 2 :(得分:1)

这是在问题1463中引起的。这似乎是遵循docs-node-gyp install -g和npm install --global --production --production Windows-build-tools的文档说明的错误

我找到了一个非常简单的解决方案。

如果node_gyp在磁盘上应有的位置,例如: “ C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ bin \ node-gyp.js”

但是会出现一条错误消息: “ C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node_modules \ node-gyp \ bin \ node-gyp.js”

您只需在“ C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \”下添加一个额外的node_modules文件夹

然后,将整个现有\ node-gyp文件夹复制到新的\ node_modules \ node_modules文件夹中。

您有一个多余的node-gyp文件夹,但是配置和构建步骤现在将按预期工作。

至少对我有用。

答案 3 :(得分:0)

浏览Visual Studio Code安装程序,然后在MSBuild Tools上,选择“更多”下拉菜单,然后单击“修复”

  

repair

答案 4 :(得分:-2)

您必须按照README https://github.com/nodejs/node-gyp#option-1

中的说法安装windows-build-tools