【问题标题】:NPM install fails with node-gypNPM 安装失败并出现 node-gyp
【发布时间】:2016-02-27 01:30:14
【问题描述】:

在我们的项目上运行 "npm install" 时遇到问题。找不到某个文件:

fatal error C1083: Cannot open include file: 'windows.h'

它似乎来自 node-gyp 模块:

c:\程序 文件\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_lo ad_hook.c(13):

致命错误 C1083:无法打开包含文件:“windows.h”:没有这样的 文件或目录 [D:\ngs-frontend-next\node_modules\browser-sync\node_module s\socket.io\node_modules\engine.io\node_modules\ws\node_modules\bufferutil\buil d\binding.sln]

这个节点-gyp 对我们来说似乎是一个永无止境的痛苦之源。起初它抱怨它需要python,所以我们安装了它。然后它抱怨它需要我们安装的VCBuild(使用.NET 2.0 SDK),现在我们有这个错误。就好像错误变得越来越模糊,感觉就像我们走错了路。

奇怪的是,我们团队中的其他人运行 npm-install 的问题为零。

完整的错误如下所示:

c:\程序 文件\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_lo ad_hook.c(13):

致命错误 C1083:无法打开包含文件:“windows.h”:没有这样的 文件或目录 [D:\ngs-frontend-next\node_modules\browser-sync\node_module s\socket.io\node_modules\engine.io\node_modules\ws\node_modules\bufferutil\buil d\binding.sln]

gyp 错误!构建错误 gyp ERR!堆栈错误: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe 失败 退出代码:ChildProcess.onExit 的 1 个堆栈(C:\Program 文件\nodejs\node_modules\npm\node _modules\node-gyp\lib\build.js:270:23) gyp 错误!堆栈在 emitTwo (events.js:87:13) gyp ERR! ChildProcess.emit 的堆栈 (events.js:172:7)gyp 错误!堆栈在 Process.ChildProcess._handle.onexit(内部/child_proces s.js:200:12)gyp 错误!系统 Windows_NT 6.1.7601 gyp 错误!命令 "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodej s\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" “重建” gyp ERR! cwd D:\ngs-frontend-next\node_modules\browser-sync\node_modules\socket。 io\node_modules\engine.io\node_modules\ws\node_modules\bufferutil gyp 呃!节点 -v v4.2.2 gyp 错误!节点-gyp -v v3.0.3 gyp 错误!不好 npm WARN 可选 dep 失败,继续 utf-8-validate@1.2.1

gifsicle@3.0.3 安装后 D:\ngs-frontend-next\node_modules\gulp-imagemin\nod e_modules\imagemin\node_modules\imagemin-gifsicle\node_modules\gifsicle 节点库/install.js

pacakge.json 看起来像这样:

{
  "name": "Fast-nunjucks",
  "version": "0.0.1",
  "description": "A simple boilerplate using nunjucks as a template engine",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/willianjusten/Fast-nunjucks.git"
  },
  "keywords": [
    "nunjucks",
    "node",
    "gulp",
    "stylus"
  ],
  "author": "Willian Justen de Vasconcellos",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/willianjusten/Fast-nunjucks/issues"
  },
  "homepage": "https://github.com/willianjusten/Fast-nunjucks",
  "devDependencies": {
    "autoprefixer-stylus": "^0.7.1",
    "browser-sync": "^2.8.2",
    "gulp": "^3.9.0",
    "gulp-cache": "^0.3.0",
    "gulp-concat": "^2.6.0",
    "gulp-if": "^1.2.5",
    "gulp-imagemin": "^2.3.0",
    "gulp-minify-html": "^1.0.4",
    "gulp-nunjucks-html": "^1.2.2",
    "gulp-order": "^1.1.1",
    "gulp-plumber": "^1.0.1",
    "gulp-stylus": "^2.0.6",
    "gulp-uglify": "^1.2.0",
    "gulp-util": "^3.0.6",
    "jeet": "^6.1.2",
    "kouto-swiss": "^0.11.13",
    "minimist": "^1.1.3",
    "rupture": "^0.6.1"
  },
  "dependencies": {
    "gulp-install": "^0.6.0"
  }
}

【问题讨论】:

  • “奇怪的是,我们团队中的其他人运行 npm-install 的问题为零。” - 确保每个人都使用相同版本的节点。
  • 这个问题你解决了吗?我有这样的东西。你能检查一下这个问题吗:stackoverflow.com/questions/34335043/… 可能你对我有一些有用的建议。
  • 我在安装了 Visual Studio 2010 / 2013 / 2015 的 PC 上尝试了几天来解决这个构建问题,但没有成功。然后最终成功地在纯 Windows VM 中构建它。我不喜欢它,但它有效。
  • 天哪。我不经常更新我的应用程序,但每次更新时,node-sass 在 npm 安装时都会失败。它真的变老了。没有其他选择吗?
  • 顺便说一句,当构建以这种方式失败时(带有节点 gyp 驱动的本机编译问题),有没有办法保留部分编译的结果/工件以进一步调查?在我的情况下,我得到了错误,但是编译的源/二进制文件被 npm 进程的其余部分清理(所以我无法更详细地解决故障)

标签: javascript node.js npm node-gyp


【解决方案1】:

错误消息让我感到困惑,并没有帮助我彻底解决错误。

node-gyp 项目的README.md 更好地列出了 Unix、Max OS X 和 Windows 的安装说明。

Windows 系统中,您可以使用选项 1 或选项 2,但主要是您需要安装 Visual C++ Build Tools

以下引用来自 Windows 安装部分:

  • 在 Windows 上:
    • Visual C++ 构建环境:
      • 选项 1:使用默认安装选项安装 Visual C++ 构建工具。
      • 选项 2:安装 Visual Studio 2015(或修改现有安装)并在安装过程中选择 Common Tools for Visual C++。这也适用于免费的 Community 和 Express for Desktop 版本。

      [仅限 Windows Vista / 7] 需要 .NET Framework 4.5.1
    • 安装 Python 2.7(不支持v3.xx),然后运行 ​​
      npm config set python python2.7
      (或参见下文了解有关指定正确 Python 版本和路径的进一步说明。 )
    • 启动cmd,
      npm config set msvs_version 2015

如果上述步骤对您不起作用,请访问 Microsoft 的 Windows Node.js 指南以获取更多提示。

Python配置常用说明:

如果您安装了多个 Python 版本,您可以通过设置 '--python' 变量来识别 node-gyp 使用哪个 Python 版本:

$ node-gyp --python /path/to/python2.7

如果通过 npm 调用 node-gyp 并且您安装了多个版本的 Python,那么您可以将 npm 的 'python' 配置键设置为适当的值:

$ npm config set python /path/to/executable/python2.7

按照上述说明成功配置了我的系统。

系统信息

λ ver

Microsoft Windows [Version 6.1.7601]

λ node -v
v6.2.0
λ npm -v
3.9.2

相关工具/文章的链接:

Visual C++ Build Tools

Visual Studio 2015

.NET Framework 4.5.1

Python 2.7

Microsoft's Node.js Guidelines for Windows

【讨论】:

  • 在你想要做的windows上 npm config set msvs_version=2015 --global
  • > node-gyp --python D:\Python27\python.exe - 'node-gyp' 未被识别为内部或外部命令、可运行程序或批处理文件。
  • npm config set python D:\Python27\python.exe 也没有帮助:stackoverflow.com/q/47759310/630169
  • 这个答案nothing与问题有关,该问题询问npm install导致node-gyp rebuild从错误的工作目录运行!
【解决方案2】:

尝试使用--force option重新安装:

npm install --force

如果这不起作用,请尝试全局更新 npm:

npm update -g npm 

然后使用--force 选项重试。

【讨论】:

  • 没用。但我认为这与 node-gyp 要求有关。在网站上说它需要安装 Visual Studio。
  • 我尝试了这种方法......但它对我不起作用。它会触发与以前相同的错误。请检查这个问题:stackoverflow.com/questions/34335043/…也许你对我有一些有用的建议......
【解决方案3】:

我尝试了上述所有解决方案,但都没有奏效。我的问题是我必须删除根目录中的一些文件:

package-lock.jsonyarn.lockyarn-error.log

删除这些文件后,我运行:

npm cache clean --force

然后我运行命令:

npm install

错误消失了

【讨论】:

  • 'npm cache clean --force' 然后 'npm install' 为我工作。谢谢:)
【解决方案4】:

我在 Mac 上遇到了几乎相同的问题。我收到了很多垃圾邮件错误消息,但最后我意识到了问题,这是版本不匹配...

说明:

npm install 安装 gyp (node-gyp) 失败:

npm ERR! gyp ERR! node -v v16.2.0
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok 
npm ERR! Build failed with error code: 1

解决方案:

将 npm / node 降级到稳定版本!

试试:

安装“n”:npm i -g n

降级 npm:sudo n stable

重新运行 npm install 即可!

【讨论】:

    【解决方案5】:

    我上次看到类似错误是因为我为我的一个依赖项使用了错误版本的 npm 和/或 node。尝试升级这些并重试。

    在再次尝试之前删除您的node_modules 目录。

    您可能需要调查您的依赖项需要哪些版本的 npmnode。您可以尝试所有依赖项、node 和 npm 的最新版本。

    检查您的同事使用的版本。

    您使用的是什么操作系统?这可能会产生影响,因为 CLANG 的版本可能不同。

    【讨论】:

    • 是否也从 nodejs 目录中删除 node_modules?
    • 仅当您还要重新安装全局软件包时
    • 使用windows 7。尝试了你所说的一切,但仍然有同样的问题。好像我需要安装 Visual Studio 或类似的东西。
    • 您能否添加更多详细信息如何检查所有依赖项?我有一个类似的问题,我在这里添加了一些细节:stackoverflow.com/questions/34335043/…也许你对我有一些有用的建议?
    【解决方案6】:
    1. 安装 VC++ 构建工具技术预览 [仅限 Windows 7] 需要 .NET Framework 4.5.1

    2. 安装 Python 2.7,并将其添加到您的 PATH,npm config set python python2.7

    3. Launch cmd, npm config set msvs_version 2015 --global(每次都用这个代替 npm install [package name] --msvs_version=2015。)

    4. 太多 npm install :tada:

    【讨论】:

    【解决方案7】:

    在此处发布我的解决方案,以防像我这样使用 Windows 10 的人在安装许多与 Microsoft 相关的构建工具后仍然遇到错误。

    您只需要:

    Windows 10 64 位

    python 2.7.x

    Visual Studio 2013

    我之前尝试过 Visual Studio 2015,但它根本不起作用。


    1. 首先,我卸载了所有与 Microsoft 相关的构建工具。 (如果您之前没有安装任何东西来尝试解决此问题,请跳过此步骤。)

    2. 安装 Visual Studio 2013。

    3. 按照@Sourav 所说的那样配置 npm:

    配置python:

    npm config set python /path/to/python2.7
    

    配置 msvs_version:

    npm config set msvs_version 2013
    

    运行npm install 或出现此错误的 npm 命令。它对我有用!

    顺便说一句,这个解决方案来自here

    【讨论】:

      【解决方案8】:

      嘿,请尝试安装windows build tools(全局 npm 包)

      这将解决您的问题 :-) 之后你应该可以使用你的 npm install 命令了。

      【讨论】:

        【解决方案9】:

        基于 node-gyp README,更新 npm npm i npm -g,并将引入更新版本的 node-gyp。

        提示:如果您使用的是 windows,请从提升的 PowerShell 或 CMD.exe(以管理员身份运行)执行 npm install --global --production windows-build-tools

        【讨论】:

          【解决方案10】:

          如果您使用“node-sass”,请将其升级到版本 5.0.0,确保您已安装构建工具 2017 和 Python 3,并在 npm install 之前发出这些命令

          npm config set msvs_version 2017

          npm config set python npm config set python C:\Users\username\AppData\Local\Programs\Python\Python39\python.exe

          【讨论】:

            【解决方案11】:

            尝试删除当前 node_modules 文件夹并以普通用户、非管理员或 root 用户身份运行命令

            【讨论】:

              【解决方案12】:

              为此解决了它(OS X):

              rm -rf  ~/.node_gyp and
              sudo npm install -g node-gyp@3.4.0
              cd /usr/local/lib
              sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib 
              brew install gcc
              npm install
              

              【讨论】:

                【解决方案13】:

                对于 Windows 8 或 10:

                假设 node 和 npm 已经安装。

                我的节点和 npm 版本(在撰写此答案时):

                节点:8.9.4

                npm : 5.6.0

                1. 先安装python 2.x

                2. 确保它在路径上可用

                3. 安装 Visual Studio Installer

                4. 安装后运行

                5. 将打开一个新界面,您可以在其中选择各种选项。
                6. 现在从可用选项中选择 Build Tools for Visual Studio 2017 并安装它。您无需安装 Visual Studio。

                安装后它应该可以正常工作。

                【讨论】:

                  【解决方案14】:

                  我正在处理一个较旧的项目并且遇到此错误(或与 node-gyp 非常相似的错误),因为 package-lock 用于较旧版本的 node.js。降级到该版本后,我能够运行 npm install 没有问题。

                  【讨论】:

                  • 在使用 node:latest 构建 docker 映像时遇到错误,导致上述错误。对于解决方案,我检查了本地节点版本并从 docker hub 和 goooosss 应用了相同的版本。问题消失了。谢谢@isick
                  【解决方案15】:

                  我在我的项目中遇到了类似的问题。就我而言,删除 package-lock.json 文件并让它重新创建会有所帮助。

                  【讨论】:

                    【解决方案16】:

                    编辑或删除你的 package-lock.json 并运行 npm install

                    【讨论】:

                      【解决方案17】:

                      我正在使用纱线,所以我只是运行 yarn global add node-gyp 来全局安装 node-gyp 而不使用 npm 并且它有效。我不再面临错误

                      对于那些使用 npm 的人,可以使用 npm install -g node-gyp

                      确保您知道运行这些命令将在您的环境中全局安装 node-gyp,也可能超出您当前应用的范围。如果您在类似环境中运行依赖于任何特定版本的node-gyp 的任何其他应用程序,您可能会遇到一些麻烦。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-05-19
                        • 2022-11-10
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-04-21
                        • 1970-01-01
                        相关资源
                        最近更新 更多