web-dev-qa-db-fra.com

l'installation de npm pour certains packages (sqlite3, socket.io) échoue avec l'erreur MSB8020 sous Windows 7

Lorsque vous essayez d'installer certains packages node.js (sqlite3 et socket.io en particulier) en utilisant npm install socket.io sur ma machine Windows 7 avec Visual Studio 2012 (et non 2010), j'ai eu quelques échecs qui ressemblaient à ceci:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets (35,5): erreur MSB8020: Les outils de génération pour Visual Studio 2010 (Platform Toolset = 'v100 ') ne peut être trouvé. Pour générer à l'aide des outils de génération v100, cliquez sur le menu Projet ou cliquez avec le bouton droit sur la solution, puis sélectionnez "Mettre à jour les projets VC++ ...". Installez Visual Studio 2010 pour générer à l'aide des outils de génération de Visual Studio 2010.

46
Gloopy

Pour contourner cela sur ma machine, j'ai fait cette commande pour installer le package:

npm install socket.io --msvs_version=2012

J'ai trouvé la réponse ici lors du problème d'installation de sqlite3 et cela fonctionnait aussi avec socket.io.

Il peut s'agir de solutions plus permanentes pour résoudre le problème:

  1. Installer Visual Studio 2010
  2. Mise à jour de la copie interne de npm vers une version plus récente de node-gyp comme décrit ici et ici (probablement la meilleure option même si je ne l'ai pas fait fonctionner mais n'ai pas essayé pour trop longtemps)
83
Gloopy

Une autre option consiste à changer la configuration au lieu de spécifier msvs_version à chaque fois:

npm config set msvs_version 2012
75
Pavel

J'ai installé Visual Studio Express 2013 et Visual Studio Community 2015.

J'obtenais 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]

La raison en était que le dernier Node.js pour Windows téléchargé depuis https://nodejs.org contient un ancien npm v2 (et l'ancien node-gyp dans ce npm v2).

J'ai dû mettre à jour le npm interne de Node.js (qui a également mis à jour le node-gyp):

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

npm config set msvs_version 2013

Maintenant ça marche (semble utiliser VS 2013 pour le moment)

2
catamphetamine

TL; DR

Si vous NE FAITES PAS voulez node-gyp pour dépendre de votre version installée de Visual Studio (ou si VS n'est pas installé), installez windows-build-tools (voir ci-dessous). Cela éliminera à la fois l'erreur et devrait éviter de futurs problèmes lors de la mise à niveau de votre version installée de Visual Studio.

Si vous [~ # ~] voulez [~ # ~] voulez node-gyp selon votre version installée de Visual Studio, puis npm config set msvs_version 2015, remplacez votre balise de version à la place de 2015. Les balises de versions valides sont: 2015, 2014, 2013, 110, 100


Correction à l'aide de windows-build-tools

Selon les instructions d'installation de node-gyp , vous pouvez également faire

npm install --global --production windows-build-tools depuis une commande [~ # ~] élevée [~ # ~] Shell

Cela installera strictement les outils de construction de Microsoft Visual C++ (ceci sera utilisé à la place de Visual Studio pour la compilation) requis par node-gyp, et définissez correctement msvs_version à la version qui vient d'être installée.

Après l'installation, vous devez vérifier que le msvs_version défini par windows-build-tools n'a pas été remplacé. Lors de l'exécution de npm config list, msvs_version devrait apparaître sous ; globalconfig C:\Users\Username\AppData\Roaming\npm\etc\npmrc; si ce n'est pas le cas, la valeur définie par windows-build-tools a été remplacé et la valeur remplacée doit être supprimée. npm config delete msvs_version devrait supprimer la valeur remplacée et celle définie par les outils de construction devrait apparaître sous la section de configuration globale.

0
Codebling