2013-05-09 20 views
18

Próbuję zainstalować socket.io na windowsie z npm do użycia na serwerze nodeJS.NPM - Nie można zainstalować socket.IO

Najpierw, gdy wpisałem "npm install socket.IO", w dzienniku pojawił się błąd, mówiąc coś o python i node-gyp. Zainstalowałem Pythona 2.7.3 i ustawiam zmienne środowiskowe.

Teraz dostałem nowy błąd, który ma coś wspólnego z visual studio (co do cholery ma VS do czynienia z npm? Czy chodzi o kompilator?).

Błąd jest taki sam jak tutaj npm install for some packages (sqlite3, socket.io) fail with error MSB8020 on Windows 7 Ale kiedy używam opcji w odpowiedzi zamiast błędu, mówi mi ona o możliwej utracie danych (c4267), ale nie rejestruje żadnego błędu.

Kiedy uruchamiam moją aplikację, mówi mi, że nie mogę znaleźć modułu socket.io nadal Co to może pochodzić?

Aha, a kiedy skonfiguruję npm root, mówi mi "nieokreślony" czy może mieć z tym coś wspólnego? Czy powinienem zainstalować moduły globalnie lub lokalnie?

Odpowiedz

35

Co najmniej jeden z pakietów w drzewie zależności Socket.IO to C/C++ addons, który należy skompilować w systemie podczas instalacji. A ponieważ jest to zależność, jeśli nie uda się jej zainstalować, nie będzie także Socket.IO.

Aby umożliwić kompilację między systemami, Node.js używa node-gyp jako swojego systemu kompilacji. Musisz mieć zainstalowany jako pakiet globalnej:

npm install -g node-gyp 

Jak również mieć its dependencies installed. Skrócona wersja:

  • Python 2
  • C/C++ Compiler/Budowanie Narzędzia
    • W przypadku systemu Windows, Microsoft Visual Studio 2013 (C++ lub pulpitu Windows) (Express Edition)
      • dla 64 -bitowy, może być potrzebny 64-bitowy zestaw Windows 7 SDK

Następnie powinieneś być w stanie zainstalować Socket.IO jako pakiet lokalnej, dzięki czemu można go require:

npm install socket.io 
+0

Dziękuję za to bardzo pełną odpowiedź. Instaluję całość. Powiedz mi, jeśli mam zainstalowaną pełną wersję Visual Studio 2012, czy muszę zainstalować Visual C++ i wygrać także sdk? – user2316341

+0

@ user2316341 Najnowsze wersje 'node-gyp' powinny współpracować z VS 2012 Professional i wyżej, zakładając, że został zainstalowany z funkcjami do programowania w C++. –

+0

Nie mogłem go uruchomić, więc odinstalowałem VS 2012, zainstalowałem VS2010, 64-bitowy sdk win7 z linku, ale nie mogę zainstalować aktualizacji kompilatora dla sdk 7.1, ponieważ mówi mi, że nie posiadać to. kiedy google dla win sdk 7.1 znajduję ten link http://www.microsoft.com/en-us/download/details.aspx?id=8442 Wypróbowałem pierwszy, ale instalacja nie działa, ponieważ jest brakuje niektórych plików. Którą mam wziąć? – user2316341

15

miałem podobny problem na Mac. Rozwiązałem mój problem, instalując nieco starszą wersję Socket.io.

zrobiłem:

npm zainstalować socket.io @ "~ 0.8.1"

które zainstalowanie najnowszej wersji 0.8.0 do 0.8.9 pomiędzy, ale nie 0.9.0 lub nowszej.

Socket.io jest wtedy idealnie zainstalowany.

+0

To działało dla mnie na Windows 8. Miałem poprawną konfigurację zmiennych PATH, zainstalowałem węzeł-gyp i tak dalej. – zvona

+0

To działało na Windows 10 i 8.1. Najwyraźniej problem dotyczy modułu ws npm wymaganego do wersji 0.9+ – geekpradd

+0

. Dzięki za to. Odsunęłam włosy na 10 minut, próbując się zorientować, co jest nie tak. –

7

Upewnij się, że wszystkie wymagane oprogramowanie do uruchomienia node-gyp:

Można skonfigurować wersję Visual Studio używane przez gyp poprzez zmienną środowiskową, dzięki czemu można uniknąć konieczności zakładania właściwość --msvs_version=2012.

Przykłady:

  • ustawić GYP_MSVS_VERSION=2012 dla Visual Studio 2012
  • ustawiony GYP_MSVS_VERSION=2013e ('E' oznacza 'Express Edition')

Pełny wykaz zobaczyć - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

Jest to nadal bolesne dla użytkowników systemu Windows NodeJS, ponieważ zakłada, że ​​masz kopię programu Visual Studi o zainstalowany i wielu użytkowników końcowych nigdy tego nie zrobi. Dlatego lobbuję Joyenta, aby zachęcił ich do włączenia gniazd sieci jako części węzła CORE, a także do wysłania kompilatora GNU gcc jako części instalacji NodeJS, abyśmy mogli na stałe rozwiązać ten problem.

Zapraszam do dodawania swój głos na:

+0

Testowałem instalowanie tego z socket.io 1.0.6, który polega na ws 0.4.31 (bit, który musi zostać skompilowany) i Visual Studio 2012. Pokazuje ostrzeżenie (żółty tekst), ale działa dobrze. –

+0

Brak odpowiedzi nie powinien być kompletny bez notatki GYP_MSVS_VERSION. Próbowałem wszystkiego, co poprzednio wspomniano i nic nie działało, dopóki nie ustawiłem tej zmiennej środowiskowej. – ryan1234

+0

Uzgodnione - jest to bardzo mylące i często zmienia się po stronie systemu Windows. To był koszmar, który starał się, żeby to działało. Nikt nie chce naprawić węzła-gyp, ponieważ jego przestarzała na korzyść ninja, nie wydaje się, aby istniała jakakolwiek ścieżka do obejścia tego, z wyjątkiem unikania wszystkich pakietów, które używają rodzimych zależności ... – cchamberlain

0

Problem powodując awarię kompilacji jest, że moduł ws zainstalowane przez moduł engine.io wymagane przez socket.io ściąga wersja nan na poziomie podstawowym. Aby uzyskać szczegółowe informacje, patrz https://github.com/BrowserSync/grunt-browser-sync/issues/95. Aby obejść ten problem po awarii budowlanej:

  • cd do node_modules/socket.io/node_modules/engine.io/node_modules/WS
  • edit package.json zmienić uwalnianie nan z 1.4.x do 1.6.0
  • poleceń problem węzła gyp odbudować

teraz powinno być w stanie wykorzystać socket.io

0

tego problemu sprawia, że ​​bardzo zmartwiony .. Próbowałem wielu rozwiązań.

Zainstalowałem pakiet SDK .NET Framework 2.0.

zainstalowaniu Python 2.7.x

I zainstalowane VS 2012 ekspresowe

ustawić niektóre ścieżki

I wykonany npm install xxx z argumentem --msvs_version=2010(or 2012/2013..) ...

Ale wszystko udało.

w końcu odinstalowałem Pythona & .NET Framework 2.0 SDK & VS 2012, usuń te ścieżki, włączyć usługę Windows Update, zainstaluj wszystkie niezbędne aktualizacje, uruchom ponownie komputer

następnie wykonywać polecenia poniżej: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

nie ma błędów w dziennikach instalacji.

Uwaga: to rozwiązanie nie może pracować dla Ciebie, ale dla mnie

0

Innym podejściem jest użycie Docker for Windows i rozpędzają środowisko NodeJS. Podczas rozwijania możesz zamontować swój kod Node jako wolumen Docker i kontynuować aktualizację kodu z Windows, ale wykonać go i zainstalować zależności w maszynie wirtualnej Linux. Po wdrożeniu może wolisz użyć pliku Dockerfile, który kopiuje twój kod Node do obrazu Docker, a więc zapakuje go do obrazu wersji, który wdrożysz.

Takie podejście może być wymagane, jeśli nie chcesz ryzykować zmiany wersji kodu socket.io lub jego zależności.

Może to być również cenne rozwiązanie, jeśli planujesz wdrożyć w firmowym intranecie lub publicznym/prywatnym chmurze.

Docker może być bardzo przydatny do testowania wdrożenia w różnych wersjach węzłów bez zakłócania środowiska programistycznego komputera z systemem Windows (na przykład do testowania biblioteki NodeJS).

Powiązane problemy