NPM - не удается установить socket.IO

Я пытаюсь установить socket.io на windows с npm для использования на сервере nodeJS.

Во-первых, когда я набрал "npm install socket.IO", в журнале была ошибка, в которой говорилось что-то о python и node-gyp. Я установил python 2.7.3 и установил переменные окружения.

Теперь я получил новую ошибку, которая как-то связана с visual studio (что, черт возьми, VS делает с npm? Это из-за компилятора?).

Ошибка та же, что и здесь. Установка npm для некоторых пакетов (sqlite3, socket.io) завершается с ошибкой MSB8020 в Windows 7. Но когда я использую опцию в ответе вместо ошибки, она говорит мне что-то о возможной потере данных (c4267) но не регистрирует ошибки.

Затем, когда я запускаю свое приложение, оно говорит мне, что не может найти модуль socket.io до сих пор.

О, а также, когда я делаю npm config получить root, он говорит мне "undefined", может ли это иметь какое-то отношение к этому? Должен ли я устанавливать модули глобально или локально?

6 ответов

По крайней мере, один из пакетов в дереве зависимостей Socket.IO - это дополнения C/C++, которые должны быть скомпилированы в вашей системе во время установки. И, поскольку это зависимость, если она не удастся установить, не будет и Socket.IO.

Чтобы включить кросс-системную компиляцию, Node.js использует node-gyp как его система сборки. Вам нужно будет установить его как глобальный пакет:

npm install -g node-gyp

А также установить его зависимости. Сокращенная версия:

  • Python 2
  • Компилятор C/C++ / Инструменты сборки
    • Для Windows, Microsoft Visual Studio 2013 (C++ или Windows Desktop) (экспресс-выпуск)
      • Для 64-битного, возможно, потребуется Windows 7 64-битный SDK

Затем вы сможете установить Socket.IO как локальный пакет, чтобы вы могли require Это:

npm install socket.io

У меня была похожая проблема на Mac. Что решило мою проблему, так это установив немного более старую версию Socket.io.

Я сделал:

npm install socket.io @ "~ 0.8.1"

который установил бы последнюю версию между 0.8.0 до 0.8.9, но не 0.9.0 или выше.

Socket.io тогда установил отлично.

Убедитесь, что у вас есть все необходимое программное обеспечение для запуска node-gyp:

Вы можете настроить версию Visual Studio, используемую gyp через переменную окружения, так что вы можете избежать необходимости устанавливать --msvs_version=2012 имущество.

Примеры:

  • задавать GYP_MSVS_VERSION=2012 для Visual Studio 2012
  • задавать GYP_MSVS_VERSION=2013e ("е" означает "экспресс-издание")

Полный список см. На https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py.

Это по-прежнему болезненно для пользователей Windows NodeJS, так как предполагает, что у вас установлена ​​копия Visual Studio, и у многих конечных пользователей ее никогда не будет. Поэтому я лоббирую Joyent, чтобы они рекомендовали включать веб-сокеты как часть узла CORE, а также, возможно, поставлять компилятор GNU gcc в качестве части установки NodeJS, чтобы мы могли навсегда решить эту проблему.

Не стесняйтесь добавлять свой голос на:

Эта проблема меня очень беспокоит.. я пробовал много решений.

Я установил.NET Framework 2.0 SDK.

Я установил Python 2.7.x

Я установил VS 2012 Express

Я установил несколько путей

Я казнил npm install xxx с аргументом --msvs_version=2010(or 2012/2013..)...

Но все не удалось.

наконец, я удалил Python & .NET Framework 2.0 SDK & VS 2012, очистил эти пути,включил Центр обновления Windows, установил все необходимые обновления, перезагрузил компьютер

затем выполните команды ниже: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

в логах установки ошибок нет.

Примечание: это решение может не работать для вас, но для меня

Проблема, вызывающая сбой компиляции, заключается в том, что модуль ws, установленный модулем engine.io, который требуется для socket.io, использует версию nan, имеющую базовый уровень. См. https://github.com/BrowserSync/grunt-browser-sync/issues/95 для получения подробной информации. Чтобы обойти проблему после сбоя сборки:

  • перейдите к node_modules/socket.io/node_modules/engine.io/node_modules/ws
  • отредактируйте файл package.json, чтобы изменить выпуск nan с 1.4.x до 1.6.0
  • выдать команду node-gyp rebuild

Теперь вы должны иметь возможность использовать socket.io

Другой подход - использовать Docker для Windows и раскрутить среду NodeJS. При разработке вы можете смонтировать код Node как том Docker и продолжать обновлять код из Windows, но выполнить его и установить его зависимости внутри виртуальной машины Linux. При развертывании вы можете предпочесть использовать Dockerfile, который скопирует ваш код Node в ваш образ Docker, и, таким образом, вставит его в образ выпуска, который вы развернете.

Этот подход может потребоваться, если вы не хотите рисковать изменением версии кода socket.io или его зависимостей.

Это также может быть полезным решением, если вы планируете развертывание в корпоративной интрасети или публичном / частном облаке.

Docker также может быть очень удобен для тестирования развертывания под разными версиями Node, не нарушая среду разработки вашего компьютера с Windows (например, для тестирования библиотеки NodeJS).

Другие вопросы по тегам