Сегодня я поведую историю одной проблемы с пакетным менеджером 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
И вот! Моя сборка опять возобновила штатную работу, порадовав меня зелёным текстами в конце!
Мораль сей заметки следующая: Следите за версиями ваших установленных пакетов. Надеюсь, кому-нибудь мой «очерк» помог
До новых статей!