Установка npm для некоторых пакетов (sqlite3, socket.io) завершается с ошибкой MSB8020 в Windows 7

При попытке установить некоторые пакеты node.js (в частности sqlite3 и socket.io), используя npm install socket.io на моей машине Windows 7 с Visual Studio 2012 (а не 2010) у меня были некоторые сбои, которые выглядели так:

C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Platform.targets (35,5): ошибка MSB8020: инструменты сборки для Visual Studio 2010 (Platform Toolset = 'v100') не может быть найден. Для сборки с использованием инструментов сборки v100 щелкните меню "Проект" или щелкните правой кнопкой мыши решение и выберите "Обновить проекты VC++...". Установите Visual Studio 2010 для сборки с использованием инструментов сборки Visual Studio 2010.

4 ответа

Решение

Чтобы обойти это на моей машине, я выполнил команду для установки пакета:

npm install socket.io --msvs_version=2012

Я нашел ответ здесь, когда возникла проблема с установкой sqlite3, и она работала и с socket.io.

Это могут быть более постоянные решения для решения проблемы:

  1. Установите Visual Studio 2010
  2. Обновление внутренней копии npm до более новой версии node-gyp, как описано здесь и здесь (возможно, лучший вариант, хотя я не работал, но не пытался слишком долго)

Другой вариант - изменить конфигурацию вместо указания msvs_version каждый раз:

npm config set msvs_version 2012

У меня установлены Visual Studio Express 2013 и Visual Studio Community 2015.

Я получал C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v140') cannot be found. To build using the v140 build tools, please install v140 build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...". [G:\work\cinema\node_modules\engine.io\node_modules\bufferutil\build\bufferutil.vcxproj]

Причина была в том, что последний Node.js для Windows, загруженный с https://nodejs.org/ содержит старый npm версия 2 (и старая node-gyp внутри этого npm v2).

Мне пришлось обновить внутренний Node.js npm (который также обновлен node-gyp):

(open console as an administrator)
cd "C:\Program Files\nodejs"
npm install npm@latest

npm config set msvs_version 2013

Теперь это работает (кажется, что он использует VS 2013 в настоящее время)

TL;DR

Если ты не хочешь node-gyp чтобы зависеть от установленной версии Visual Studio (или не иметь установленной VS), установите windows-build-tools (увидеть ниже). Это устранит как ошибку, так и позволит избежать будущих проблем при обновлении установленной версии Visual Studio.

Если вы хотите node-gyp зависеть от установленной версии Visual Studio, то npm config set msvs_version 2015, замените свой тег версии вместо 2015, Допустимые версии тегов: 2015, 2014, 2013, 110, 100


Исправление с помощью windows-build-tools

Согласно инструкции по установке node-gyp, вы также можете сделать

npm install --global --production windows-build-tools из ELEVATED командной оболочки

Это установит строго инструменты сборки Microsoft Visual C++ (которые будут использоваться вместо Visual Studio для компиляции), необходимые для node-gyp и соответственно установить msvs_version до версии только что установлен.

После установки вы должны убедиться, что msvs_version установить с помощью windows-build-tools не был переопределен При выполнении npm config list, msvs_version должен появиться под ; globalconfig C:\Users\Username\AppData\Roaming\npm\etc\npmrc; если это не так, значение устанавливается windows-build-tools был переопределен, и переопределенное значение должно быть удалено. npm config delete msvs_version следует удалить переопределенное значение, а значение, установленное инструментами сборки, должно появиться в разделе глобальной конфигурации.

Другие вопросы по тегам