Как установить предыдущую точную версию пакета NPM?

918

Я использовал nvm для загрузки узла v0.4.10 и установил npm для работы с этой версией узла.

Я пытаюсь установить экспресс с помощью

npm install express -g

и я получаю сообщение об ошибке, что Express требует версии узла> = 0.5.0.

Ну, это странно, так как я , следуя инструкциям на узле + экспресс + MongoDB учебник здесь , что используемый узел v0.4.10, поэтому я предполагаю , что экспресс / была доступна для узла v0.4.10. Если мои предположения верны, как я могу сказать npm выбрать версию, которая будет работать с моими настройками?

stewart99
источник
7
Почему бы вам просто не обновить свою версию Node? Уверен, что найдется гораздо больше хороших дополнений, чем нарушенное поведение.
Фабрисио Мате
1
Иногда это не вариант. Если он использовал nvm для понижения, это может быть вызвано тем, что какая-то другая группа контролирует версию исполняемого узла, которую он должен использовать.
fool4jesus

Ответы:

1585

Если вам нужно установить более старую версию пакета, просто укажите ее

npm install <package>@<version>

Например: npm install express@3.0.0

Вы также можете добавить --saveфлаг к этой команде, чтобы добавить его в ваши зависимости package.json, или --save --save-exactпометить, если вы хотите, чтобы точная версия была указана в ваших зависимостях package.json.

Команда installзадокументирована здесь: https://docs.npmjs.com/cli/install

Если вы не уверены, какие версии пакета доступны, вы можете использовать:

npm view <package> versions

И npm viewможет быть использован для просмотра других вещей о пакете тоже. https://docs.npmjs.com/cli/view

Брет Коупленд
источник
4
Я полагаю, что это установит ближайшую основную версию, которая соответствует, так что это может быть не то, что вы ожидаете stackoverflow.com/a/22345808/1074400
Аакил Фернандес
2
@AakilFernandes, если вы укажете точную версию, точная версия будет установлена. Если вы укажете семантический диапазон версий, вы можете получить не точное совпадение. В этом отношении нет ничего уникального в команде install.
Брет Коупленд
6
npm view <package> versions -jsonчтобы увидеть каждую версию, избегая многоточия в конце списка со многими версиями.
TheDarkIn1978
5
Если вы используете npm install express@3.0.0, вы не получите точную версию 3.0.0, вы получите самую последнюю версию 3.xx. Чтобы получить конкретную версию, вы должны использовать npm install express@3.0.0 --save-exact. Смотрите этот пост в блоге: 60devs.com/npm-install-specific-version.html
Патрик
5
@PatrickHund нет, npm install express@3.0.0вы получите именно версию 3.0.0. npm install express@^3.0.0Получит последнюю версию 3.xx, которая --save-exactвлияет на то, как она написана на packages.json, о чем я уже говорил в своем ответе. Также обратите внимание, --save-exactдолжен использоваться в сочетании с --saveили --save-dev- недостаточно использовать его сам по себе.
Брет Коупленд
94

Это довольно просто. Просто напишите это, например:

npm install -g npm@4.6.1

Или:

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release
inaps
источник
1
Спасибо за теги latestи nextверсии!
Джимми
@inaps, вы можете добавить примечание, что этот -gфлаг предназначен специально для пакетов, которые вы хотите установить глобально, так как многие пользователи попадают на эту страницу и просто копируют / вставляют, не понимая, как они собираются повлиять на экосистему своих пакетов. Мы все были «тем парнем»
Джексонкр
73

Сначала удалите старую версию, затем выполните буквально следующее:

npm install express@3.X

и для стабильной или недавней

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release
Саурабх Чандра Патель
источник
12
Является ли это литералом Xили заменой некоторого числового номера версии?
Кит Томпсон
7
Это был либо вопрос, либо вопрос, а не вопрос да / нет. Я пытался npm install express@3.X, и это, казалось, сработало. Это особенность или случайный способ npmразбора номера версии?
Кит Томпсон,
3
@KeithThompson Да, это так! Хехе, просто шучу ... Это путь npmразбирает, см: docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-
Gonz
3
@gonz: Так что это буквально X.
Кит Томпсон
1
Я просто хотел спросить, почему это работает для вас. Я не знаю первоначального намерения Саураба или того, что вы пытаетесь сделать. 3.X будет означать> = 3.0 и <4.0.
гонз
41

На мой взгляд, это самый простой и быстрый способ:

$ npm -v

4.2.0

$ npm install -g npm@latest-3

...

$ npm -v

3.10.10

Олег Безкоровайный
источник
2

Вы можете обновить свой пакет npm с помощью этой команды:

npm install <package_name>@<version_number>

пример: npm install yargs@12.02

Мехеди Абдулла
источник
1

У меня есть общий способ решения этого типа проблем, который также может быть полезен, особенно при клонировании репозиториев для их локального запуска, но требует немного большего анализа версий.

С помощью пакета npm-check-updatesя проверяю версии пакетов (в соответствии с файлом package.json), которые не объявлены в их последних доступных версиях, как показано на рисунке ( https://www.npmjs.com/package/npm-check -обновления ):

введите описание изображения здесь

С помощью этой информации мы можем проверить статус обновления различных пакетов и принять решение о том, какие пакеты обновлять / ухудшать, а какие нет.

Предполагая, что мы решили обновить все пакеты по мере их перечисления, мы можем использовать ncu -uкоманду, которая только изменяет ваш файл package.json. Запустите npm installдля обновления установленных пакетов и package-lock.json.

Затем, в зависимости от требований хранилища, мы можем уточнить, что нужно, установив конкретные версии с помощью npm view <package> versionsи npm install <package>@<version>

Алехандро Араужо
источник
1

npm install -g npm@version

в котором вы хотите понизить

npm install -g npm@3.10.10

Лакшай Шарма
источник
но если мне это нужно локально? мне нужно поставить --save?
АлексейНиконов
Да, вы тоже .. он будет загружать пакет локально.
Лакшай Шарма
@AlexNikonov ommit -g(для глобальной установки, затем он попадает в директорию вашего текущего проекта /node_modules) и да, --saveили --save-devдля получения записиpackage.json
Фрэнк
0

Вы можете использовать следующую команду для установки предыдущей версии пакета npm:

npm install packagename@version
мизинец
источник
0

Для пользователей пряжи:

yarn add package_name@version_number
Питер Моисей
источник
-3

В Ubuntu вы можете попробовать эту команду.

sudo npm cache clean -f
sudo npm install -g n
sudo n stable 

Конкретная версия: sudo n 8.11.3 вместо sudo n stable

Дипти Гехлот
источник