2013-05-09 29 views
18

Sto cercando di installare socket.io su Windows con npm per l'utilizzo su un server nodeJS.NPM - Impossibile installare socket.IO

In primo luogo, quando ho digitato "npm install socket.IO" ho avuto un errore nel registro che diceva qualcosa su python e node-gyp. Ho installato python 2.7.3 e impostato le variabili d'ambiente.

Ora ho un nuovo errore, che ha qualcosa a che fare con Visual Studio (che diavolo VS ha a che fare con npm? Si tratta del compilatore?).

L'errore è lo stesso di qui npm install for some packages (sqlite3, socket.io) fail with error MSB8020 on Windows 7 Ma quando uso l'opzione nella risposta anziché l'errore, mi dice qualcosa su una possibile perdita di dati (c4267) ma non registra alcun errore.

Poi quando avvio la mia app, mi dice che non riesco a trovare module socket.io ancora Da dove potrebbe venire?

Oh e anche quando faccio npm config get root mi dice "undefined" potrebbe avere qualcosa a che fare con esso? Devo installare i moduli globalmente o localmente?

risposta

35

Almeno uno dei pacchetti nell'albero delle dipendenze di Socket.IO è un C/C++ addons che deve essere compilato sul sistema al momento dell'installazione. E poiché è una dipendenza, se non riesce a installarlo, neanche Socket.IO.

Per abilitare la compilazione tra più sistemi, Node.js utilizza node-gyp come sistema di generazione. Avrete bisogno di avere installato come un pacchetto globale:

npm install -g node-gyp 

così come hanno its dependencies installed. versione ridotta:

  • Python 2
  • C/C++ Compiler/creare strumenti
    • Per Windows, Microsoft Visual Studio 2013 (C++ o Windows Desktop) (Express edition)
      • Per 64 bit, può avere bisogno di Windows 7 64-bit SDK

Poi, si dovrebbe essere in grado di installare Socket.IO come un pacchetto locale in modo da poter require esso:

npm install socket.io 
+0

Grazie per questa risposta molto completo. Sto installando il tutto. Dimmi, se ho installato la versione completa di Visual Studio 2012, devo installare Visual C++ e win sdk pure? – user2316341

+0

@ user2316341 Le versioni recenti di 'node-gyp' dovrebbero funzionare con VS 2012 Professional e versioni successive, supponendo che siano state installate con funzionalità per lo sviluppo C++. –

+0

Non riuscivo a farlo funzionare, quindi ho disinstallato VS 2012, ho installato VS2010, il sdk a 64 bit win7 dal tuo collegamento, ma non riesco a installare l'aggiornamento del compilatore per sdk 7.1 perché mi dice che non lo faccio averlo. quando ho google per win sdk 7.1 trovo questo link http://www.microsoft.com/en-us/download/details.aspx?id=8442 Ho provato il primo ma l'installazione non funziona perché è manca alcuni file. Quale dovrei prendere? – user2316341

15

Ho avuto un problema simile su Mac. Ciò che ha risolto il mio problema è l'installazione di una versione leggermente più vecchia di Socket.io.

ho fatto:

npm installare socket.io @ "~ 0.8.1"

che installare l'ultima versione 0.8.0 alla 0.8.9 tra, ma non 0.9.0 o superiore.

Socket.io quindi installato perfettamente.

+0

Questo ha funzionato per me su Windows 8. Ho avuto l'installazione corretta per variabili PATH, node-gyp installato e così via. – zvona

+0

Questo ha funzionato su Windows 10 e 8.1 .. Apparentemente il problema è con il modulo ws npm richiesto per la versione 0.9+ – geekpradd

+0

Grazie per questo. Mi sono strappato i capelli per 10 minuti cercando di capire cosa c'era che non andava. –

7

Assicurarsi di avere tutto il software necessario per eseguire node-gyp:

È possibile configurare versione di Visual Studio usata da gyp tramite una variabile di ambiente in modo da poter evitare di dover impostare la proprietà --msvs_version=2012.

Esempi:

  • impostati GYP_MSVS_VERSION=2012 per Visual Studio 2012
  • impostato GYP_MSVS_VERSION=2013e (la 'e' sta per 'Express Edition')

Per l'elenco completo vedi - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

Questo è ancora doloroso per gli utenti Windows di NodeJS in quanto si presuppone che si disponga di una copia di Visual Studi o installato e molti utenti finali non avranno mai questo. Quindi faccio pressione su Joyent per incoraggiarli a includere i socket Web come parte del nodo CORE e anche a spedire un compilatore GNU gcc come parte dell'installazione di NodeJS in modo da poter risolvere il problema in modo permanente.

Sentitevi liberi di aggiungere il tuo voto a:

+0

Ho provato a installarlo con socket.io 1.0.6 che si basa su ws 0.4.31 (il bit che deve essere compilato) e Visual Studio 2012. Mostra avviso (testo giallo) ma funziona bene. –

+0

Nessuna risposta dovrebbe essere completa senza la nota GYP_MSVS_VERSION. Ho provato tutto precedentemente menzionato e niente ha funzionato fino a quando non ho impostato quella variabile di ambiente. – ryan1234

+0

concordato - Questo è molto confuso e cambia spesso sul lato Windows. È stato un incubo cercare di farlo funzionare. Nessuno vuole risolvere node-gyp perché è diventato deprecato in favore di ninja, non sembra esserci alcun tipo di percorso per aggirarlo, tranne evitare tutti i pacchetti che usano le dipendenze native ... – cchamberlain

0

il problema che causa l'errore di compilazione è che il modulo ws installato dal modulo engine.io richiesto dalla socket.io tira in una versione di back-livello di nan. Vedi https://github.com/BrowserSync/grunt-browser-sync/issues/95 per i dettagli. Per aggirare il problema, dopo l'errore di generazione:

  • cd per node_modules/socket.io/node_modules/engine.io/node_modules/ws
  • modifica package.json per cambiare il rilascio di nan da 1.4.x a 1.6.0
  • comando questione node-gyp ricostruire

ora dovrebbe essere in grado di utilizzare socket.io

0

questo problema mi rende molto travagliata .. Ho provato molte soluzioni.

Ho installato .NET Framework 2.0 SDK.

ho installato Python 2.7.x

ho installato VS 2012 espresso

ho impostato alcuni percorsi

ho eseguito npm install xxx con l'argomento --msvs_version=2010(or 2012/2013..) ...

Ma tutti falliti.

Infine, ho disinstallato Python & .NET Framework 2.0 SDK & VS 2012, cancellare quei sentieri, attivare Windows Update, installare tutti gli aggiornamenti essenziali, riavviare il computer

quindi eseguire comandi di seguito: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

non ci sono errori nei registri di installazione.

Nota: questa soluzione potrebbe non funzionare per voi, ma per me

0

Un altro approccio è quello di utilizzare Docker for Windows e girare un ambiente NodeJS. Durante lo sviluppo è possibile montare il codice Node come un volume Docker e quindi continuare ad aggiornare il codice da Windows, ma eseguirlo e installarne le dipendenze all'interno di una VM Linux. Quando lo distribuisci potresti preferire utilizzare un Dockerfile che COPY sia il tuo codice di nodo nell'immagine Docker e quindi lo inforni nell'immagine di rilascio che distribuisci.

Questo approccio potrebbe essere necessario se non si vuole rischiare di cambiare la versione del codice e le sue dipendenze da socket.io.

Potrebbe anche essere una soluzione preziosa se si prevede di eseguire l'implementazione su una Intranet aziendale o su un cloud pubblico/privato.

Docker può anche essere molto utile per testare la distribuzione in diverse versioni del nodo senza disturbare l'ambiente di sviluppo del computer Windows (ad esempio per testare una lib NodeJS).

Problemi correlati