web-dev-qa-db-fra.com

NPM - Impossible d'installer socket.IO

J'essaie d'installer socket.io sur Windows avec NPM pour une utilisation sur un serveur nodeJS.

Tout d’abord, lorsque j’ai tapé "npm install socket socket", j’ai eu une erreur dans le journal qui disait quelque chose à propos de python et de node-gyp. J'ai installé python 2.7.3 et défini les variables d'environnement.

Maintenant, j'ai une nouvelle erreur, qui a quelque chose à voir avec Visual Studio (qu'est-ce que VS a à voir avec npm? Est-ce à propos du compilateur?).

L'erreur est la même qu'ici L'installation de npm pour certains paquets (sqlite3, socket.io) échoue avec l'erreur MSB8020 sous Windows 7 sur une possible perte de données (c4267) mais ne consigne aucune erreur.

Ensuite, lorsque je lance mon application, il me dit que je ne trouve pas encore le module socket.io De quoi cela pourrait-il provenir?

Oh, et quand npm config obtient root, il me dit "indéfini", est-ce que cela a quelque chose à voir avec ça? Dois-je installer les modules globalement ou localement?

18
user2316341

Au moins l'un des packages de l'arbre de dépendance de Socket.IO est un addon C/C++ qui doit être compilé sur votre système à l'installation. Et, puisqu'il s'agit d'une dépendance, si l'installation ne réussit pas, Socket.IO ne le fera pas non plus.

Pour permettre la compilation intersystème, Node.js utilise node-gyp comme système de construction. Vous devrez l'avoir installé en tant que paquet global:

npm install -g node-gyp

Ainsi que ses dépendances installées . Version abrégée:

  • Python 2
  • Outils de compilation/compilation C/C++
    • Pour Windows, Microsoft Visual Studio 2013 (C++ ou Windows Desktop) (édition Express)
      • Pour 64 bits, peut nécessiter un SDK Windows 7 64 bits

Ensuite, vous devriez pouvoir installer Socket.IO en tant que paquet local afin de pouvoir require le:

npm install socket.io
35

J'ai eu un problème similaire sur Mac . Ce qui a résolu mon problème est d'installer une version légèrement plus ancienne de Socket.io.

J'ai fait:

npm install socket.io @ "~ 0.8.1"

qui installerait la dernière version entre 0.8.0 et 0.8.9, mais pas 0.9.0 ou supérieure.

Socket.io est alors parfaitement installé.

15
Daniel

Assurez-vous de disposer de tous les logiciels requis pour exécuter node-gyp:

Vous pouvez configurer la version de Visual Studio utilisée par gyp via une variable d'environnement afin d'éviter de devoir définir la propriété --msvs_version=2012.

Exemples: 

  • définir GYP_MSVS_VERSION=2012 pour Visual Studio 2012 
  • set GYP_MSVS_VERSION=2013e (le «e» signifie «édition express») 

Pour la liste complète, voir - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

Cela reste difficile pour les utilisateurs Windows de NodeJS car cela suppose que vous avez une copie de Visual Studio installée et que de nombreux utilisateurs finaux ne l'auront jamais. Je fais donc pression sur Joyent pour les encourager à inclure des sockets Web dans le nœud CORE et également à envoyer un compilateur GNU gcc dans le cadre de l'installation de NodeJS afin que nous puissions résoudre ce problème de façon permanente. 

N'hésitez pas à ajouter votre vote à:

7
Tony O'Hagan

Le problème qui cause l’échec de la compilation est que le module ws installé par le module engine.io requis par socket.io récupère une version backlevel de nan. Voir https://github.com/BrowserSync/grunt-browser-sync/issues/95 pour plus de détails. Pour contourner le problème après l'échec de la génération:

  • cd vers node_modules/socket.io/node_modules/engine.io/node_modules/ws
  • modifier package.json pour changer la version de nan de 1.4.x à 1.6.0
  • émettre la commande node-gyp rebuild

Vous devriez maintenant pouvoir utiliser socket.io

0
David Tootill

ce problème me rend très troublé ... J'ai essayé de nombreuses solutions. 

J'ai installé .NET Framework 2.0 SDK.

J'ai installé Python 2.7.x

J'ai installé VS 2012 Express

Je trace des chemins

J'ai exécuté npm install xxx avec l'argument --msvs_version=2010(or 2012/2013..)...

Mais tout a échoué.

enfin, j'ai désinstallé Python et .NET Framework 2.0 SDK & VS 2012, effacez ces chemins, activez Windows Update, installez toutes les mises à jour essentielles, redémarrez mon ordinateur

puis exécutez les commandes ci-dessous: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

il n'y a pas d'erreur dans les journaux d'installation.

Remarque: cette solution peut ne pas fonctionner pour vous, mais pour moi

0
hidmouth

Une autre approche consiste à utiliser Docker pour Windows et à créer un environnement NodeJS. Pendant le développement, vous pouvez monter votre code de nœud en tant que volume Docker et continuer ainsi à mettre à jour votre code à partir de Windows, mais l'exécuter et installer ses dépendances dans une machine virtuelle Linux. Lorsque vous déployez, vous préférerez peut-être utiliser un fichier Docker qui copie votre code de nœud dans votre image Docker et l'insère ainsi dans l'image finale que vous déployez.

Cette approche peut être nécessaire si vous ne souhaitez pas risquer de changer la version socket.io de votre code ou ses dépendances.

Cela peut également s'avérer une solution intéressante si vous envisagez de déployer sur un réseau intranet d'entreprise ou un cloud public/privé. 

Docker peut également s'avérer très pratique pour tester le déploiement sous différentes versions de Node sans perturber l'environnement de développement de votre ordinateur Windows (par exemple, pour tester une librairie NodeJS).

0
Tony O'Hagan