it-swarm.com.de

NPM - Socket.IO kann nicht installiert werden

Ich versuche, socket.io unter Windows mit npm zur Verwendung auf einem nodeJS-Server zu installieren.

Als ich "npm install socket.IO" eingab, hatte ich einen Fehler im Protokoll, der etwas über Python und node-gyp sagte. Ich habe Python 2.7.3 installiert und die Umgebungsvariablen eingestellt.

Jetzt habe ich einen neuen Fehler, der etwas mit Visual Studio zu tun hat (was zum Teufel hat VS mit npm zu tun? Geht es um den Compiler?).

Der Fehler ist derselbe wie hier npm installiert für einige Pakete (sqlite3, socket.io) fehl mit dem Fehler MSB8020 unter Windows 7 .__ Wenn ich jedoch die Option in der Antwort anstelle des Fehlers verwende, wird mir etwas angezeigt über einen möglichen Datenverlust (c4267), protokolliert jedoch keinen Fehler.

Wenn ich dann meine App starte, wird mir gesagt, dass ich das Modul socket.io immer noch nicht finden kann.

Ach ja, und wenn ich npm config root bekomme, dann sagt es mir "undefined". Hat es etwas damit zu tun? Soll ich die Module global oder lokal installieren?

18
user2316341

Mindestens eines der Pakete im Abhängigkeitsbaum von Socket.IO besteht aus C/C++ - Addons , die bei der Installation auf Ihrem System kompiliert werden müssen. Und weil es eine Abhängigkeit ist, wird auch Socket.IO nicht funktionieren, wenn es nicht erfolgreich installiert wird.

Um die systemübergreifende Kompilierung zu ermöglichen, verwendet Node.js node-gyp als Buildsystem. Sie müssen es als globales Paket installiert haben:

npm install -g node-gyp

Ebenso haben seine Abhängigkeiten installiert . Kurzfassung:

  • Python 2
  • C/C++ - Compiler/Build-Tools
    • Für Windows Microsoft Visual Studio 2013 (C++ oder Windows Desktop) (Express Edition)
      • Für 64-Bit benötigen Sie möglicherweise ein Windows 7-64-Bit-SDK

Dann sollten Sie Socket.IO als lokales Paket installieren können, um require es zu können:

npm install socket.io
35

Ich hatte ein ähnliches Problem auf dem Mac .. Was mein Problem gelöst hat, ist die Installation einer etwas älteren Version von Socket.io.

Ich tat:

npm install socket.io @ "~ 0.8.1"

dies würde die neueste Version zwischen 0.8.0 und 0.8.9 installieren, nicht jedoch 0.9.0 oder höher.

Socket.io ist dann perfekt installiert.

15
Daniel

Stellen Sie sicher, dass Sie über alle erforderliche Software verfügen, um node-gyp auszuführen:

Sie können die von gyp verwendete Version von Visual Studio über eine Umgebungsvariable konfigurieren, sodass Sie die --msvs_version=2012-Eigenschaft nicht festlegen müssen.

Beispiele: 

  • legen Sie GYP_MSVS_VERSION=2012 für Visual Studio 2012 fest 
  • set GYP_MSVS_VERSION=2013e (das 'e' steht für 'Express Edition') 

Für die vollständige Liste siehe - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

Für Windows-Benutzer von NodeJS ist dies immer noch schmerzhaft, da davon ausgegangen wird, dass Sie eine Kopie von Visual Studio installiert haben und viele Endbenutzer dies niemals haben werden. Ich fordere Joyent daher auf, die Web-Sockets als Teil des CORE-Knotens einzubeziehen und möglicherweise einen GNU gcc-Compiler als Teil der NodeJS-Installation zu versenden, damit wir dieses Problem dauerhaft beheben können. 

Fühlen Sie sich frei, Ihre Stimme hinzuzufügen bei:

7
Tony O'Hagan

Das Problem, das den Kompilierungsfehler verursacht, besteht darin, dass das vom socket.io-Modul installierte ws-Modul eine von Socket.io benötigte Version in eine Backlevel-Version von nan einfügt. Weitere Informationen finden Sie unter https://github.com/BrowserSync/grunt-browser-sync/issues/95 . So umgehen Sie das Problem nach dem Build-Fehler:

  • cd zu node_modules/socket.io/node_modules/engine.io/node_modules/ws
  • bearbeiten Sie package.json, um die Version von nan von 1.4.x auf 1.6.0 zu ändern
  • befehl ausgeben node-gyp rebuild

Sie sollten nun socket.io verwenden können

0
David Tootill

dieses Problem macht mich sehr beunruhigt ... Ich habe viele Lösungen ausprobiert. 

Ich habe .NET Framework 2.0 SDK installiert.

Ich habe Python 2.7.x installiert

Ich habe VS 2012 Express installiert

Ich habe einige Pfade gesetzt

Ich habe npm install xxx mit dem Argument --msvs_version=2010(or 2012/2013..)... ausgeführt.

Aber alle sind gescheitert.

schließlich habe ich Python & .NET Framework 2.0 SDK & VS 2012 deinstalliert, diese Pfade löschen, Windows Update aktivieren, alle wichtigen Updates installieren, Computer neu starten

führen Sie dann die folgenden Befehle aus: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

es gibt keine Fehler in den Installationsprotokollen.

Hinweis: Diese Lösung funktioniert möglicherweise nicht für Sie, aber für mich

0
hidmouth

Ein anderer Ansatz ist die Verwendung von Docker für Windows und das Starten einer NodeJS-Umgebung. Während der Entwicklung können Sie Ihren Node-Code als Docker-Volume einbinden und so den Code weiterhin von Windows aus aktualisieren, aber ausführen und die Abhängigkeiten in einer Linux-VM installieren. Bei der Bereitstellung möchten Sie möglicherweise eine Docker-Datei verwenden, bei der COPY Ihren Node-Code in Ihr Docker-Image enthält, und so in das von Ihnen bereitgestellte Release-Image gebacken wird.

Dieser Ansatz kann erforderlich sein, wenn Sie nicht riskieren möchten, die Version von socket.io oder die Abhängigkeiten des Codes zu ändern.

Dies kann auch eine wertvolle Lösung sein, wenn Sie die Bereitstellung in einem Unternehmensintranet oder einer öffentlichen/privaten Cloud planen. 

Docker kann auch sehr nützlich sein, um die Bereitstellung unter verschiedenen Versionen von Node zu testen, ohne die Entwicklungsumgebung Ihres Windows-Computers zu beeinträchtigen (z. B. zum Testen einer NodeJS-Bibliothek).

0
Tony O'Hagan