我只是在学习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)
我花了很多时间 - 我无法相信这是多么痛苦。
我有
任何想法从哪里开始?
答案 0 :(得分:3)
您的node-gyp模块是从NPM初始化的,但很可能它的正确路径没有添加到系统中的环境变量中,只需将其添加到系统变量即可。检查路径变量是否有" C:// Users / abc / AppData / Roaming / npm "如果没有,请添加它。
还要检查python是否已添加到您的环境变量中。
干杯!
答案 1 :(得分:3)
这篇文章试图通过覆盖先前的安装并从{{1}开始将node-gyp
从Node.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 | +-------+-----------------------------+-------------+-------------------------------------+
您可能已经完成了此处概述的一些步骤。如果您遇到了某些问题,则可以通过详细查看以下步骤来确定出问题的阶段:
参考
Python
:README.md( G 启用 Y 我们的 P 项目)本指南假定您的计算机中已经安装了node-gyp
(无论如何,您都将找到Windows here的安装程序)。
git
:download您平台的最新LTS版本(Windows Installer Node.js
应该可以运行)要验证其是否已正确安装,请在测试文件夹中添加具有以下.msi
代码:test.js
的文件javascript
,并在终端运行中console.log("Node is installed!");
。应该提示您node test.js
。
Node is installed!
软件包将npm
升级到最新的稳定版本
以管理员身份运行PowerShell终端:
npm-windows-upgrade
将提示您选择一个版本。选项中可用的最大版本应该没问题。
如果您错过了此软件包,则可能要按照GitHub repository中概述的步骤按照说明进行安装,该步骤主要是在以管理员身份运行的PowerShell控制台中键入以下内容:
PS C:\WINDOWS\system32> nmp-windows-upgrade
如果您已经安装了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
但是,您可以选择通过其他方式实现这一目标:
npm install --global --production windows-build-tools --vs2015
,并且只想配置Visual Studio
来使用它node-gyp
,然后再配置Visual Studio
来使用它这完全取决于您。在本指南的稍后阶段,我们将逐步完成将node-gyp
配置为使用特定node-gyp
版本的步骤。
在Visual Studio
(GitHub official repo)的安装指南中指定了node-gyp
的哪些版本当前与 Unix 上的最新Python
版本兼容和 macOS 。 但是对 Windows 平台(截至2020年3月1日)不进行解释。
尽管目前缺乏文档,但通过查看其他用户对此的问题,可以假设在Windows平台上,node-gyp
仅支持node-gyp
Python
(reference)。
现在是正确设置v2.7.X
配置的时候了。
如果尚未安装它:
node-gyp
(5.1)设置npm install --global node-gyp
版本
根据文档:
如果将环境变量NODE_GYP_FORCE_PYTHON设置为Python可执行文件的路径,则将使用它代替任何其他已配置或内置的Python搜索路径。如果不是兼容版本,将不会进行进一步的搜索。
Python
文件的完整路径(通过完整路径表示全部:文件夹路径 + 目标)文件C:\full_path\Python2.7.X\python.exe
)python.exe
Environmental Variables...
条目New
,并使用python.exe文件版本NODE_GYP_FORCE_PYTHON
的完整路径作为值,然后单击2.7.X
,即可完成操作
OK
的{{1}}版本或者,您可以使用以下命令行:
python
(5.2)设置node-gyp
版本
这一步应该很容易:
npm config set python /path/to/executable/python
版本(即2015年,2017年,2019年)的 Visual Studio Build Tools
year
例如,如果您希望它使用MSBuild of 2019,请使用以下命令:
Visual Studio
那一定已经做到了。
npm config set msvs_version year
中创建一个简单的附件来测试node-gyp 参考
npm config set msvs_version 2019
如何嵌入C++
中的说明)V8
C++
的动手
在Node.js
文件夹中,使用以下空文件创建v12.0
子文件夹:
test
(我们的源代码test\hello_module
本机代码)hello_module\hello.cc
(C++
的说明文件)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
文件夹。
注释:
gyp info ok
,则完成了test\hello_module\build\Release
的安装验证:它可以正常工作!
hello.node
或ok
配置没问题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)
答案 4 :(得分:-2)
您必须按照README https://github.com/nodejs/node-gyp#option-1
中的说法安装windows-build-tools