Проблема с npm

Сегодня я поведую историю одной проблемы с пакетным менеджером npm.

В один прекрасный день столкнулся с такой проблемой: часть UI в нашем проекте перестала собираться. Валилось всё на стадии загрузки npm-зависимостей. Ошибка была для меня непонятной, т.к. никогда на такое я ещё не нарывался. Но тем оно и интереснее!

Заключалась ошибка в том, что npm во время установки выдавал ошибку парсинга JSON и печатал кучу всяких красных некрасивых иероглифов-кракозябров. Вот так:

npm http GET https://registry.npmjs.org/grunt-teamcity
npm http GET https://registry.npmjs.org/bower
npm http GET https://registry.npmjs.org/karma
npm http 200 https://registry.npmjs.org/phantomjs
npm ERR! registry error parsing json
npm ERR! SyntaxError: Unexpected token 
npm ERR! ���Ko�6����ca���)����v�.�=�I[�,        e#        ��w(�'�c�Ţ6|b�3����g�~&���j�
........... Дальше идёт простыня всяческих кракозябров ...........
npm ERR!     at Object.parse (native)
npm ERR!     at RegClient. (/usr/lib/node_modules/npm-registry-client/lib/request.js:238:23)
npm ERR!     at Request.self.callback (/usr/lib/node_modules/request/index.js:148:22)
npm ERR!     at Request.emit (events.js:98:17)
npm ERR!     at Request. (/usr/lib/node_modules/request/index.js:891:14)
npm ERR!     at Request.emit (events.js:117:20)
npm ERR!     at IncomingMessage. (/usr/lib/node_modules/request/index.js:842:12)
npm ERR!     at IncomingMessage.emit (events.js:117:20)
npm ERR!     at _stream_readable.js:943:16
npm ERR!     at process._tickCallback (node.js:419:13)

Поиски на просторах интернета ничем мне не помогли. Сначала я во всём винил пакет phantomjs, т.к. именно после него начинались ошибки. Порыскал в его репозитории похожие проблемы, но ничего не нашёл.

Пытался также делать:

> npm cache clean

Думал, что какая-то кривизна образовалась в локальном кэше, но и это мне не помогло.

Дальше я решил вручную поставить какой-нибудь другой пакет, например, недавно нашумевший в npm-сообществе left-pad. И тут неудача! Я понял, что проблема не в конкретном пакете, а в менеджере. Но некоторые пакеты всё-таки ставились без проблем, но методом единичных проб обнаружил, что их было значительно меньше.

Начал изучать вопрос с npm. Stackoverflow мне не помог… И тут я в блоге npm’а обнаружил новость о полном переходе в новой версии npm с HTTP на HTTPS. Возникла идея! Видимо, всё дело в версии npm. У меня стояла версия 1.8 (которая ставилась из yum-репозитория), а текущая была 3.8.5. Отстал я немного :) Обновил npm следующей командой:

npm install -g npm // Не забудьте в случае ошибки доступа добавить sudo

И вот! Моя сборка опять возобновила штатную работу, порадовав меня зелёным текстами в конце!

Мораль сей заметки следующая: Следите за версиями ваших установленных пакетов. Надеюсь, кому-нибудь мой «очерк» помог :)

До новых статей!