Я скопировал package.json из другого проекта и теперь хочу перевести все зависимости в их последние версии, так как это свежий проект, и я не против исправить что-то, если оно сломается.
Какой самый простой способ сделать это?
Лучший способ, который я знаю сейчас, - это запустить npm info express version
затем обновить package.json для каждого из них вручную. Должен быть лучший способ.
{
"name": "myproject",
"description": "my node project",
"version": "1.0.0",
"engines": {
"node": "0.8.4",
"npm": "1.1.65"
},
"private": true,
"dependencies": {
"express": "~3.0.3", // how do I get these bumped to latest?
"mongodb": "~1.2.5",
"underscore": "~1.4.2",
"rjs": "~2.9.0",
"jade": "~0.27.2",
"async": "~0.1.22"
}
}
ОБНОВЛЕНИЕ 5/1/19 : Шесть лет спустя, и я все еще поддерживаю npm-check-updates как комплексное решение этой проблемы. Наслаждайтесь!
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Ответы:
Похоже, npm-check-updates - единственный способ сделать это сейчас.
В нпм <3.11:
Просто измените версию каждой зависимости на
*
, затем запуститеnpm update --save
. ( Примечание: сломано в последних (3.11) версиях npm ).Перед:
После:
Конечно, это тупой молоток обновления зависимостей. Хорошо, если, как вы сказали, проект пуст и ничто не сломается.
С другой стороны, если вы работаете в более зрелом проекте, вы, вероятно, захотите убедиться, что в ваших зависимостях нет критических изменений перед обновлением.
Чтобы увидеть, какие модули устарели, просто запустите
npm outdated
. В нем будут перечислены все установленные зависимости, для которых доступны более новые версии.источник
*
в package.json, так как в итоге вы можете автоматически установить новую версию модуля с критическими изменениями, которые ломают ваше приложение. Так как мы используем--save
здесь, то*
заменяется текущей версией каждого пакета.npm install --save
подстановочный знак остается в моемpackage.json
.update
не работает для меня. Я все еще остался с подстановочными знаками. Есть ли какая-либо документация по этому поводу, о которой вы знаете, или какие-либо другие ресурсы, на которые я мог бы взглянуть?npm install -g npm-check-updates
для установки, затемnpm-check-updates
для проверки наличия обновлений в ваших зависимостях иnpm-check-updates -u
для обновления ваших пакетов package.json. Тогда это просто,npm install
и он будет загружать новые версии.npm update --save
вместоnpm update --save-dev
.npm-check-updates
это утилита, которая автоматически настраивает package.json с последней версией всех зависимостейсм. https://www.npmjs.org/package/npm-check-updates
[EDIT] Несколько менее навязчивый (избегает глобальной установки) способ сделать это, если у вас есть современная версия
npm
:источник
ncu -a
, не обновляя также package.json.Обновлено для последней версии NPM
нпм 2+ (узел 0,12+):
Древний нпм (около 2014 года):
Обязательно сверните свои дела, иначе вы можете оказаться на мертвом проекте. Я вытащил проект на днях, и он не запустился, потому что все мои работы были устаревшими / обновленными / в беспорядке. Если бы я сжался, npm установил бы именно то, что мне нужно.
подробности
Для любопытных, которые делают это далеко, вот что я рекомендую:
Используйте
npm-check-updates
или,npm outdated
чтобы предложить последние версии.Затем выполните чистую установку (без предупреждений о зависимости)
Наконец, сохраните точные версии
npm-shrinkwrap.json
сnpm shrinkwrap
Теперь,
npm install
теперь будут использовать точные версии вnpm-shrinkwrap.json
Если вы войдете
npm-shrinkwrap.json
в git, все установки будут использовать одинаковые версии.Это способ перехода из разработки (все обновления, все время) в производство (никто ничего не трогает).
нпм устарел
NPM-чек-обновление
термоусадочная пленка
PS Пряжа отправляет ваш список пакетов в Facebook .
источник
npm-shrinkwrap.json
исходный код и делаете коммит при каждом обновлении, вы всегда можете «вернуться туда, где вы были». Я упустил из виду функцию термоусадочной пленки, когда начал.npm update
только обновления до версии semver, а не до последней.yarn upgrade package@version
?Чтобы обновить одну зависимость до последней версии, не открывая
package.json
и не изменяя ее вручную , вы можете запуститьт.е.
Для справки, npm-install
Как отметил пользователь Vespakoen об отклоненном редактировании, также возможно обновить несколько пакетов одновременно следующим образом:
Он также использует однострочник для оболочки на основе
npm outdated
. Смотрите редактирование для кода и объяснения.PS: я также ненавижу вручную редактировать
package.json
такие вещи;)источник
npm install react-native-image-picker@* --save
ncu express mocha chai
. Вы также можете исключить пакеты сncu -x mocha
. Я согласен, что вышеизложенное - самое простое решение для обновления одного пакета.npm install {package-name}@latest {save flags}
Если вам случается использовать Visual Studio Code в качестве вашей IDE, это забавное небольшое расширение для обновления
package.json
одним щелчком мыши.Версия объектива
источник
Это работает с npm 1.3.15.
источник
npm shrinkwrap
заморозить Депс."react": "16.9.0"
а затем я добавил последнюю и запустилnpm i
, после этого, как мне найти, какая версия реакции теперь есть в моем проекте? так"react":"latest"
это , что осталось в моей package.json, а не количество , даже после того, как я сделалnpm i
*
как версию для последних выпусков, в том числе нестабильныхlatest
как определение версии для последней стабильной версииLatestStablePackages
Вот пример:
источник
Единственное предостережение, которое я нашел с лучшим ответом выше, это то, что он обновляет модули до последней версии. Это означает, что он может обновиться до нестабильной альфа-сборки.
Я бы использовал эту утилиту npm-check-updates. Моя группа использовала этот инструмент, и он работал эффективно, устанавливая стабильные обновления.
Как сказал Этьен выше: установите и запустите с этим:
источник
rm -rf node_modules
прежде чемnpm install
избавился от некоторых предупреждений о зависимости для меня.Чтобы увидеть, какие пакеты имеют более новые версии, используйте следующую команду:
чтобы обновить только одну зависимость, просто используйте следующую команду:
Например:
Мой
package.json
файл имеет зависимость:тогда я должен написать:
источник
Мне очень нравится, как работает npm-upgrade . Это простая утилита командной строки, которая просматривает все ваши зависимости и позволяет вам увидеть текущую версию по сравнению с последней версией и обновить, если хотите.
Вот скриншот того, что происходит после запуска
npm-upgrade
в корне вашего проекта (рядом сpackage.json
файлом):Для каждой зависимости вы можете выбрать обновление, игнорирование, просмотр журнала изменений или завершение процесса. До сих пор это отлично сработало.
РЕДАКТИРОВАТЬ: Чтобы было ясно, это сторонний пакет, который должен быть установлен, прежде чем команда будет работать. Это не идет с самим npm:
Затем из корня проекта, который имеет файл package.json:
источник
npm-upgrade
у меня не сработало, но сработало,npm upgrade
и он обновил мой файл package.json, который был именно тем, что я искал.npm-upgrade
заключается в том, что вы можете точно увидеть, что обновляется, и выбрать, какие из них будут обновлены.npm upgrade
может хорошо работать для большинства людей, но иногда вам нужно иметь немного больше контроля при обновлении.npx npm-upgrade
- довольно круто! :)Вот базовое регулярное выражение для соответствия семантическим номерам версий, чтобы вы могли быстро заменить их все звездочкой.
Семантическая версия Regex
Как пользоваться
Выберите версии пакета, которые вы хотите заменить, в файле JSON.
Введите приведенное выше регулярное выражение и убедитесь, что оно соответствует правильному тексту.
Заменить все совпадения звездочкой.
Запустить
npm update --save
источник
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
и нажиматьctrl+d
несколько раз, пока не выделите их все, затем перейти к номеру версии (нажмите стрелку вправо 2 раза) и нажмите пробел ctrl, затем введите"*"
Недавно мне пришлось обновить несколько проектов, которые использовали npm и package.json для их волшебства gruntfile.js. Следующая команда bash (многострочная команда) хорошо сработала для меня:
Идея здесь: чтобы направить
npm outdated
вывод как json,jq
(jq - это инструмент синтаксического анализа / запроса командной строки json)
(обратите внимание на использование
--depth
аргумента дляnpm outdated
),jq сократит вывод до только имени пакета верхнего уровня.
наконец, xargs помещает каждое LIBRARYNAME по одному в
npm install LIBRARYNAME --save-dev
командуВышесказанное работает для меня на работающей машине: node = v0.11.10 osx = 10.9.2 npm = 1.3.24
для этого требуется:
xargs http://en.wikipedia.org/wiki/Xargs (я верю, что он принадлежит моей машине)
и
jq http://stedolan.github.io/jq/ (я установил его с помощью
brew install jq
)Примечание: я сохраняю обновленные библиотеки только в package.json внутри ключа json
devDependancies
, используя--save-dev
, что было требованием моих проектов, вполне возможно, не вашим.После я проверяю, что все подливается простым
Кроме того, вы можете проверить текущие версии установленной библиотеки верхнего уровня с помощью
источник
awk
вместо этого я использую простое :npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Если вы хотите использовать мягкий подход через красивый (для терминала) интерфейс интерактивной отчетности, я бы предложил использовать npm-check .
Это меньше хлопот и дает вам более последовательные знания и контроль над вашими обновлениями зависимостей.
Чтобы дать вам представление о том, что ждет, вот скриншот (вырезанный со страницы git для проверки npm):
источник
Эта функция была введена в
npm v5
. обновить до npm, используяnpm install -g npm@latest
иобновлять
package.json
удалить
/node_modules
иpackage-lock.json (if you have any)
бежать
npm update
. это обновит зависимости package.json до последней версии, основанной на semver .обновить до самой последней версии. ты можешь пойти с
npm-check-updates
источник
Если вы используете пряжу, следующая команда обновляет все пакеты до последней версии:
yarn upgrade --latest
Из их документов :
источник
package.json
- github.com/yarnpkg/yarn/issues/4390Начиная с версии 5.2.0 npm, есть способ выполнить это в одной строке без установки каких-либо дополнительных пакетов в глобальный реестр npm или локально в ваше приложение. Это можно сделать, используя новую
npx
утилиту, поставляемую в комплекте с npm. ( Нажмите здесь, чтобы узнать больше. )Запустите следующую команду в корне вашего проекта:
источник
npm install
чтобы фактически загрузить новые зависимости. Так что я думаю, что это просто обновляет package.json, если я что-тоnpm install
после обновления зависимостей.Я использую,
npm-check
чтобы достичь этого.Еще один полезный список команд, который будет хранить точные номера версий в
package.json
источник
ncu -u
и неncu -ua
во второй последней строке. Я не могу редактировать, потому что одно изменение символа не допускается. Очень полезно, кстати.Updtr!
https://github.com/peerigon/updtr
источник
Команды , которые я должен был использовать для обновления
package.json
дляNPM 3.10.10
:Фон:
Я использовал последнюю команду от @ josh3736, но моя
package.json
не была обновлена. Затем я заметил текст описания при запускеnpm-check-updates -u
:Читая документацию для npm-check-updates, вы можете увидеть разницу:
https://www.npmjs.com/package/npm-check-updates
ncu - это псевдоним,
npm-check-updates
как видно из сообщения при вводеnpm-check-updates -u
:источник
-a
это поведение по умолчанию, а перезапись package.json оставлена исключительно для-u
опции.Если вы используете
yarn
,yarn upgrade-interactive
это действительно гладкий инструмент, который может позволить вам просмотреть ваши устаревшие зависимости, а затем выбрать, какие из них вы хотите обновить.Больше причин использовать пряжу
npm
. Хех.источник
package.json
- github.com/yarnpkg/yarn/issues/4390Вышеуказанные команды небезопасны, потому что вы можете сломать ваш модуль при переключении версий. Вместо этого я рекомендую следующее
npm shrinkwrap
команды.источник
Попробуйте следующую команду, если вы используете npm 5 и узел 8
npm update - сохранить
источник
update
, похоже, не затрагивает зависимости, выходящие за рамки исходного определения. Еслиpackage.json
заявит"1.2.3"
точно, то не получишь1.2.4
. Это может быть хорошо или плохо :)Следующий код (который был принят) написал мне что-то вроде «это займет слишком много времени, бла-бла» и ничего не сделал. Возможно, использование глобального флага было проблемой, idk.
Я решил использовать свой текстовый редактор и использовать полуручный подход.
Я скопировал этот список (чуть дольше) из моих зависимостей dev
package.json
в текстовый редактор notepad ++:Я установил режим поиска на регулярное выражение, использовал
^\s*"([^"]+)".*$
шаблон для получения имени пакета и заменил его наnpm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Нажал на "заменить все". Результат был следующим:Я скопировал его обратно в bash и нажал ввод. Все было обновлено и работает нормально. Это все.
Я не думаю, что это имеет большое значение, так как вы должны делать это время от времени, но вы можете легко написать скрипт, который анализирует
package.json
и обновляет ваши пакеты. Я думаю, что так будет лучше, потому что вы можете редактировать свой список, если вам нужно что-то особенное, например, сохранить текущую версию библиотеки.источник
--packageFile package.json
так, чтобы знать, не ждать stdin.Я решил это, увидев инструкции с https://github.com/tjunnone/npm-check-updates
источник
Я нашел другое решение для последней версии NPM. То, что я хочу сделать, это заменить все зависимости "*" явным последним номером версии. Ни один из обсуждаемых методов не помог мне.
Что я сделал:
npm-check-updates -u
Все в package.json теперь обновлено до последней версии.
источник
Если вы не хотите устанавливать глобальные npm-check-updates, вы можете просто запустить это:
источник
Альтернатива
каждый раз, когда вы используете npm update, он автоматически обновляется до последней версии. Дополнительную версию синтаксиса вы можете проверить здесь: https://www.npmjs.org/doc/misc/semver.html
источник
Решение без дополнительных пакетов
Измените версию каждой зависимости на
*
:Тогда беги
npm update --save
.Некоторые из ваших пакетов были обновлены, а некоторые нет?
Это сложная часть, это означает, что ваша локальная версия «реакции» была ниже, чем самая новая. В этом случае npm скачал и обновил пакет «прореагировать». Однако ваша локальная версия «response-google-maps» такая же, как и самая новая.
Если вы все еще хотите «обновить» без изменений
*
, вы должны удалить эти модули изnode_modules
папки.например, удалить
node_modules/react-google-maps
.Наконец-то снова запустить
npm update --save
.Не забудьте запустить,
npm update --save-dev
если вы хотите обновить зависимости разработки.источник
Greenkeeper, если вы используете Github. https://greenkeeper.io/
Это интеграция с Github и невероятно прост в настройке. После установки он автоматически создает запросы на извлечение в указанных вами хранилищах (или во всех, если требуется) и постоянно обновляет ваш код, не заставляя вас делать что-либо вручную. После этого PR должны инициировать сборку службы CI, и в зависимости от успешной или неудачной проверки вы можете продолжать выяснять, что вызывает проблему или когда проходы CI просто объединяют PR.
Внизу вы можете увидеть, что первая сборка не удалась сначала, а после фиксации («обновление до узла v6.9») тесты пройдены, и я наконец смог объединить PR. Поставляется с большим количеством смайликов тоже.
Другой альтернативой будет https://dependencyci.com/ , однако я не тестировал его интенсивно. После первого взгляда Greenkeeper выглядит лучше в целом IMO и имеет лучшую интеграцию.
источник
Должны получить самые последние требуемые версии, совместимые с вашим приложением. Но не последние версии.
источник