Почему "npm install" работает очень медленно?
Что я делаю не так при настройке своих пакетов? Есть ли способ ускорить это?
packages.json :
{
"name": "testing node",
"version": "0.0.0",
"description": "",
"main": "app.config.js",
"dependencies": {
"babel-core": "^6.17.0",
"babel-loader": "^6.2.0",
"babel-plugin-add-module-exports": "^0.1.2",
"babel-plugin-react-html-attrs": "^2.0.0",
"babel-plugin-transform-class-properties": "^6.3.13",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"react": "^0.14.6",
"react-dom": "^0.14.6",
"webpack": "^1.12.9",
"webpack-dev-server": "^1.14.1",
"mysql": "*"
},
"devDependencies": {},
"scripts": {
"dev": "webpack-dev-server --content-base src --inline --hot",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Когда внутри папки, если я запускаю
npm install
Я получаю следующее, что может занять несколько часов, чтобы полностью настроить:
![npm install stuck]()
Это не общая компьютерная или аппаратная проблема. Сравнительные скорости ниже:
- Выполнение
haversine
для расчета всех расстояний на более чем 1 млн. Записей в неиндексной таблице MySQL занимает значительно меньше времени. (Вычислительная)
- Загрузите полную версию Linux (Dual Layer DVD ISO) за значительно меньшее время. (Пропускная способность)
Я подозреваю, что что-то не так с моим packages.json
или командой, которую я выполняю npm install
. Судя по изображению, существует множество попыток получить один и тот же файл. Возможно, есть способ заставить npm
извлечь из более стабильного зеркала? Возможен ли выбор зеркала, который он использует по умолчанию, шаткий? Просто некоторые предложения - я не знаю конкретной причины, поэтому я и спрашиваю.
Эта проблема также возникает на моих блоках Linode, Digital Ocean и VULTR - так что я подозреваю, что это что-то особенное с npm
, с тем, как я использую (чего-то не хватает) или с моим packages.json
.
Ответы
Ответ 1
Я смог решить эту проблему из раздела комментариев; изложив процесс ниже.
Из комментариев
AndreFigueiredo заявил:
Я установил модули здесь менее чем за 1 минуту с вашим package.json с npm v3.5.2 и node v4.2.6. Я предлагаю вам обновить узел и npm.
В v1.3.0 даже не было введено сглаженных зависимостей в v3, что решило множество досадных проблем
LINKIWI заявил:
Вообще говоря, не полагайтесь на менеджеров пакетов, таких как apt, для поддержки современного программного обеспечения. Я настоятельно рекомендую очистить комбо node/npm, который вы установили с apt, и следовать инструкциям на nodejs.org для установки последней версии.
наблюдения
Следуя их советам, я заметил, что CentOS, Ubuntu и Debian используют очень устаревшие версии nodejs
и npm
при извлечении текущей версии с использованием apt
или yum
(в зависимости от менеджера первичных пакетов операционных систем).
Избавьтесь от устаревших nodejs
и npm
Чтобы решить эту проблему с минимально возможной головной болью, я запустил следующую команду (в Ubuntu):
apt-get purge --auto-remove nodejs npm
Это nodejs
систему от архаичных nodejs
и npm
а также от всех зависимостей, которые больше не требовались
Установите текущий nodejs
и совместимый npm
Следующая цель состояла в том, чтобы получить текущую версию nodejs
и npm
которую я могу прямо отсюда и nodejs
и либо скомпилировать, либо использовать двоичный файл, однако это не позволит легко менять версии по мере необходимости (в зависимости от возраста проекта).).
Я натолкнулся на отличный пакет под названием nvm, который (на данный момент), кажется, справляется с этой задачей довольно хорошо. Чтобы установить текущую стабильную последнюю сборку версии 7 для nodejs
:
Установить nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
Источник .bashrc
source ~/.bashrc
Используйте nvm для установки nodejs
7.x
nvm install 7
После установки я был приятно удивлен гораздо более высокой производительностью npm
, что теперь он также показывает симпатичную полосу прогресса при вытащении пакетов.
Для тех, кому интересно, текущая (по состоянию на эту дату) версия npm
должна выглядеть следующим образом (а если нет, вам, вероятно, придется обновить ее):
![current npm running]()
Резюме
НЕ ИСПОЛЬЗУЙТЕ СВОЙ МЕНЕДЖЕР ПАКЕТОВ ОС, ЧТОБЫ УСТАНОВИТЬ NODE.JS ИЛИ NPM - вы получите очень плохие результаты, так как кажется, что ни одна ОС не поддерживает эти пакеты (даже близко) к текущим. Если вы обнаружите, что npm
работает медленно и это не ваш компьютер или интернет, скорее всего, это из-за сильно устаревшей версии.
Ответ 2
Я использую Linux и использую nvm
и работаю с более чем 7 версией узла. По своему опыту я столкнулся с той же ситуацией с моим последним проектом (на самом деле это были не часы, а минуты, так как я не могу ждать часами из-за почасового проекта :))
Отказ от ответственности: не пытайтесь использовать опцию ниже, пока не узнаете, как работает очистка кэша
npm cache clean --force
и тогда все работает нормально для меня, так что, похоже, иногда кеш npm путают с разными версиями Node.
Официальную документацию кеша Npm можно найти здесь
Ответ 3
Проблема: NPM не работает, если вы не обновляете его.
Тем не менее, в прошлом для меня были испорчены версии с короткими краями.
Решение. Как упоминалось в Kraang, используйте node менеджер версий nvm, lts flag
Установите его:
curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
Затем используйте это часто, чтобы перейти к последней версии "долгосрочной поддержки" NPM:
nvm install --lts
Большое оговорка: вам, вероятно, придется переустановить все пакеты, когда вы получите новую версию npm.
Ответ 4
По вашему скриншоту я вижу, что вы используете WSL в Windows. А вместе с Windows поставляются антивирусные сканеры, а антивирусное сканирование может сделать установку NPM очень медленной!
Добавление исключения или отключение проверки на вирусы во время установки может значительно ускорить его, но потенциально это нежелательно, учитывая возможность вредоносных пакетов NPM.
Одна ссылка предлагает тройное время установки https://ikriv.com/blog/?p=2174
Я не широко профилировал себя, хотя
Ответ 5
У меня была эта проблема, и ни одно из решений в SO не помогло. Я понял это, поэтому я публикую это здесь на случай, если у кого-то еще есть подобная проблема.
Я пытался запустить Npm я на Амазонке. Проблема закончилась тем, что linux открывает только определенное количество портов, а когда запускается npm, он открывается, как более тысячи подключается к реестру, чтобы загрузить все пакеты. Так что это сработало бы, но потом просто завис на 15 минут. Затем произойдет тайм-аут, и он в конечном итоге перейдет на другой порт. Поэтому в моей группе безопасности в AWS я добавил правило для All TCP на 0.0.0.0/0 только для исходящих, позволяя npm открывать столько исходящих соединений, сколько ему нужно, и это исправило это.
Ответ 6
У меня была такая же проблема, я на nodejs version: 8.9.4
и npm version: 5.6.0
.
Я пробовал много решений в Интернете, в том числе на этом посту, ни один не работал у меня, затем я нашел о менеджер пакетов пряжи, который решил проблему для меня, поэтому, если все не удается, я думаю, что "пряжа" стоит проверить.
Ответ 7
У меня была такая же проблема на Debian, пряжа была решением для меня.
Ответ 8
Одна вещь, которую я заметил, - если вы работаете в новом проекте (папке), вам нужно перенастроить настройку прокси для определенного пути
-
Cd (изменить путь окна терминала к папке назначения.
-
npm config set proxy http://(ip адрес):( порт)
-
npm config set https-proxy http://(ip адрес):( порт)
-
npm install -g @ angular/cli