Подтвердить что ты не робот

Собственные сборки NPM с установленной только Visual Studio 2013

У меня есть чистая установка Windows с установленной Visual Studio 2013 Pro вместе с текущими версиями Python, node и npm.

Я пытаюсь установить пакет pg npm, но он требует встроенной сборки и не работает:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): Ошибка MSB8020: инструменты сборки для Visual Studio 2012 (платформа Toolset = 'v110') не может быть найден. Чтобы построить с помощью сборки v110 инструменты, пожалуйста, установите инструменты построения Visual Studio 2012. С другой стороны, вы можете перейти к текущим инструментам Visual Studio, выбрав Меню проекта или справа -выберите решение, а затем выберите "Upgrade Solution...". [C:\Users\Aaron\AppData\Roaming\НПМ\ node_modules\пг\построить\binding.vcxproj]

Я не могу найти инструменты сборки для Visual Studio 2012, как описано, и я бы предпочел не устанавливать VS2012 только для этого. Есть ли способ заставить установку и сборку использовать доступные 2013 компилятор/инструменты, не меняя код пакета?

Я не мог найти никого, описывающего эту конкретную проблему, и решение, использующее мой Googlefu.

4b9b3361

Ответ 1

У меня слишком чистая установка Windows 8.1 (64 бит) Pro только с Visual Studio 2013 (без предыдущей версии VS, хотя некоторые компоненты поставлялись с SQL Server 2014). Не удалось выполнить команду npm install с аналогичной ошибкой.

Итак, я попытался указать версию VS

npm install --msvs_version=2013 <package>

Он начал правильно использовать Platform Toolset 'v120', но сборка завершилась неудачей со следующей ошибкой (обратите внимание на V110, используемый в пути для целей):

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(44,5): error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v120 to build using the v120 build tools.

Я пошел на путь c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\ и нашел там две подпапки: V110 и V120.

Чтобы исправить путь, используемый для целей, мне пришлось установить переменную среды следующим образом:

set VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120

Затем пакет был установлен.

Для справки, версии:
VS 2013 Premium
Python 2.7.8
C:\Windows\system32>npm version { http_parser: '1.0', node: '0.10.29', v8: '3.14.5.9', ares: '1.9.0-DEV', uv: '0.10.27', zlib: '1.2.3', modules: '11', openssl: '1.0.1h', npm: '1.4.14' }

Ответ 2

Что мне помогло - указать переменную окружения GYP_MSVS_VERSION, чтобы использовать правильный VS
вы можете установить его в Центре управления или в консоли перед запуском npm, так что в 2013 году он будет

set GYP_MSVS_VERSION=2013

а для 2015 года вы используете

set GYP_MSVS_VERSION=2015

С бесплатным выпуском сообщества VS 2013 или 2015 он должен быть самым простым способом.

PS
Я считаю, что для VS 2013 Express вы должны использовать

set GYP_MSVS_VERSION=2013e

где e сообщает npm использовать экспресс-версию

Ответ 3

Обновлен node-gyp до последней версии (1.0.2): npm install node-gyp -g

Обратите внимание, что вы также должны обновить node-gyp, который внутренне используется node

Теперь node-gyp будет поддерживать вашу Visual Studio 2013 - вы можете проверить метод <npm-cache>/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py, _CreateVersion.

Однако собственные модули по-прежнему не будут создаваться, что приведет к ошибке, связанной с отсутствием некоторых файлов с данными (из SDK Windows, например, winsock2.h). Это связано с тем, что Visual Studio 2013 поставляется с SDK 7.1A по умолчанию. Но default Toolset - это "v120", который ожидает 8.1 SDK (который необходимо установить дополнительно).

Чтобы построить только с запасом VS 2013, вам нужно изменить, какой набор инструментов выбран. Вы можете сделать это, изменив ~/.node-gyp/common.gypi файл (идея взята из здесь) и вместо этого измените набор инструментов на 'v120_xp' (который будет использовать в комплекте 7.1A SDK):

{ ... 'target_defaults': { ... 'configurations': { ... 'Release': { 'conditions': [ ['target_arch=="x64"', { 'msvs_configuration_platform': 'x64', 'msbuild_toolset': 'v120_xp' <--- THIS LINE! }], } } } }

Voila - теперь встроенные модули npm будут скомпилированы с установкой Visual Studio 2013!

Ответ 4

npm config set msvs_version 2013 --global

Ответ 5

У меня были похожие ошибки с VS2015, но установка параметра msvs:

npm install --msvs_version=2015

не решал проблему. Я мог видеть, что он искал неправильное место для набора инструментов, независимо от того, что я сделал.

Короче говоря, я узнал, что MSBuild теперь упакован с Visual Studio и больше не упакован с .NET. Конечно, у меня была эта запись в переменной PATH:

C:\Windows\Microsoft.NET\Framework\v4.0.30319;

и, следовательно, вызывается неправильная (старая) версия MSBuild. Я удалил эту запись и добавил следующий путь, который имеет отношение к VS2015:

C:\Program Files (x86)\MSBuild\14.0\Bin\

Проблема решена.