Как обновить каждую зависимость в package.json до последней версии?
Я скопировал 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 как комплексное решение этой проблемы. Наслаждайтесь!
Ответы
Ответ 1
Похоже, что npm-check-updates - единственный способ сделать это сейчас.
npm i -g npm-check-updates
ncu -u
npm install
На npm <3.11:
Просто измените каждую версию зависимостей на *
, затем запустите npm update --save
. (Примечание: нарушена последняя версия (3.11) npm).
До:
"dependencies": {
"express": "*",
"mongodb": "*",
"underscore": "*",
"rjs": "*",
"jade": "*",
"async": "*"
}
После:
"dependencies": {
"express": "~3.2.0",
"mongodb": "~1.2.14",
"underscore": "~1.4.4",
"rjs": "~2.10.0",
"jade": "~0.29.0",
"async": "~0.2.7"
}
Конечно, это тупой молот для обновления зависимостей. Это прекрасно, если, как вы сказали, проект пуст, и ничто не может сломаться.
С другой стороны, если вы работаете в более зрелом проекте, вы, вероятно, захотите убедиться, что перед обновлением изменений в ваших зависимостях не произошло.
Чтобы узнать, какие модули устарели, просто запустите npm outdated
. В нем будут перечислены все установленные зависимости, которые имеют более новые версии.
Ответ 2
npm-check-updates
- это утилита, которая автоматически настраивает package.json с последней версией всех зависимостей
см. https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
[EDIT] Немного менее навязчивый (избегает глобальной установки) способ сделать это, если у вас есть современная версия npm
:
$ npx npm-check-updates -u
$ npm install
Ответ 3
Обновлено для NPM 7
нпм 2+ (узел 0.1 2+):
npm outdated
npm update
git commit package-lock.json
Древний нпм (около 2014 года):
npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json
Обязательно сверните свои дела, иначе вы можете получить мертвый проект. Я вытащил проект на днях, и он не запустился, потому что все мои работы были устаревшими/обновленными/в беспорядке. Если бы я сжался, npm установил бы именно то, что мне нужно.
Подробнее
пряжа Facebook и отправляет все ваши данные пакета в Facebook, чтобы они могли продать его.
Для любопытных, которые делают это далеко, вот что я рекомендую:
Используйте npm-check-updates
или npm outdated
, чтобы предложить последние версии.
# 'outdated' is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.
$ npm update
# OR
# Install and use the 'npm-check-updates' package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u
Затем выполните чистую установку (без предупреждений о зависимости)
$ rm -rf node_modules
$ npm install
Наконец, сохраните точные версии в npm-shrinkwrap.json
с помощью npm shrinkwrap
$ rm npm-shrinkwrap.json
$ npm shrinkwrap
Теперь npm install
теперь будет использовать точные версии в npm-shrinkwrap.json
Если вы включите npm-shrinkwrap.json
в git, все установки будут использовать одни и те же версии.
Это способ перехода из разработки (все обновления, все время) в производство (никто ничего не трогает).
постскриптум Пряжа отправляет ваш список пакетов в Facebook.
Ответ 4
Чтобы обновить одну зависимость до последней версии без необходимости вручную открывать package.json
и изменять его, вы можете запустить
npm install {package-name}@* {save flags?}
т.е.
npm install [email protected]* --save
Для справки: npm-install
Как отметил пользователь Vespakoen об отклоненном редактировании, также возможно обновить несколько пакетов одновременно следующим образом:
npm install --save [email protected]* [email protected]* [email protected]*
Он также добавляет однострочник для оболочки на основе npm outdated
. См. правку для получения кода и объяснения.
PS: я также ненавижу вручную редактировать package.json
для таких вещей;)
Ответ 5
Если вы используете код Visual Studio в качестве своей IDE, это забавное небольшое расширение, чтобы сделать обновление package.json
одним щелчком мыши процесс.
Ответ 6
Это работает с номером npm 1.3.15.
"dependencies": {
"foo": "latest"
}
Ответ 7
- Используйте
*
как версию для последних версий, включая нестабильные
- Используйте
latest
как определение версии для последней стабильной версии
- Измените package.json точно с последним стабильным номером версии, используя
LatestStablePackages
Вот пример:
"dependencies": {
"express": "latest" // using the latest STABLE version
, "node-gyp": "latest"
, "jade": "latest"
, "mongoose": "*" // using the newest version, may involve the unstable releases
, "cookie-parser": "latest"
, "express-session": "latest"
, "body-parser": "latest"
, "nodemailer":"latest"
, "validator": "latest"
, "bcrypt": "latest"
, "formidable": "latest"
, "path": "latest"
, "fs-extra": "latest"
, "moment": "latest"
, "express-device": "latest"
},
Ответ 8
Единственное предостережение, которое я нашел с лучшим ответом выше, это то, что он обновляет модули до последней версии. Это означает, что он может обновиться до нестабильной альфа-сборки.
Я бы использовал эту утилиту npm-check-updates.
Моя группа использовала этот инструмент и эффективно работала, установив стабильные обновления.
Как сказал Этьен выше: установите и запустите с этим:
$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install
Ответ 9
Чтобы узнать, какие пакеты имеют более новые версии, используйте следующую команду:
npm outdated
для обновления только одной зависимости просто используйте следующую команду:
npm install [email protected] --save
Например:
У моего файла package.json
есть зависимость:
"@progress/kendo-angular-dateinputs": "^1.3.1",
то я должен написать:
npm install @progress/[email protected] --save
Ответ 10
Мне очень нравится, как работает npm-upgrade. Это простая утилита командной строки, которая просматривает все ваши зависимости и позволяет вам увидеть текущую версию по сравнению с последней версией и обновить, если хотите.
Вот скриншот того, что происходит после запуска npm-upgrade
в корне вашего проекта (рядом с файлом package.json
):
Для каждой зависимости вы можете выбрать обновление, игнорирование, просмотр журнала изменений или завершение процесса. До сих пор это отлично сработало.
РЕДАКТИРОВАТЬ: Чтобы было ясно, это сторонний пакет, который должен быть установлен, прежде чем команда будет работать. Это не идет с самим npm:
npm install -g npm-upgrade
Затем из корня проекта, который имеет файл package.json:
npm-upgrade
Ответ 11
Вот базовое регулярное выражение для соответствия номерам семантической версии, чтобы вы могли быстро заменить их звездочкой.
Повторное выражение для семантической версии
([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Как использовать
Выберите версии пакета, которые вы хотите заменить в файле JSON.
Введите регулярное выражение выше и убедитесь, что оно соответствует правильному тексту.
Замените все совпадения звездочкой.
Выполнить npm update --save
Ответ 12
Недавно мне пришлось обновить несколько проектов, которые использовали npm и package.json для их магии gruntfile.js. Следующая команда bash (многострочная команда) хорошо работала для меня:
npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev
Идея здесь:
Чтобы передать вывод 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
, это требование моих проектов, вполне возможно, не ваше.
После этого я проверяю, что все подслащено простым
npm outdated --depth=0
Кроме того, вы можете проверить текущие версии установленных версий библиотеки с помощью
npm list --depth=0
Ответ 13
Эта функция была введена в npm v5
. обновить до npm, используя npm install -g [email protected]
и
обновить package.json
-
delete /node_modules
и package-lock.json(if you have any)
-
запустить npm update
. это обновит зависимости package.json до последней версии, основанной на semver.
обновить до самой последней версии. вы можете пойти с npm-check-updates
Ответ 14
Если вы хотите использовать мягкий подход через красивый (для терминала) интерфейс интерактивных отчетов, я бы предложил использовать npm-check.
Это меньше хлопот и дает вам более последовательные знания и контроль над вашими обновлениями зависимостей.
Чтобы дать вам представление о том, что ждет здесь снимок экрана (вырезано со страницы git для проверки npm):
Ответ 15
Начиная с версии 5.2.0 npm, есть способ выполнить это в одной строке без установки каких-либо дополнительных пакетов в глобальный реестр npm или локально в ваше приложение. Это можно сделать, используя новую утилиту npx
которая поставляется вместе с npm. (Нажмите здесь, чтобы узнать больше.)
Запустите следующую команду в корне вашего проекта:
npx npm-check-updates -u && npm i
Ответ 16
Updtr!
Исходя из npm устаревшего, updtr устанавливает последнюю версию и запускает npm-тест для каждой зависимости. Если тест будет успешным, updtr сохранит номер новой версии вашего пакета .json. Однако, если тест не удается, updtr отбрасывает свои изменения.
https://github.com/peerigon/updtr
Ответ 17
Я использую npm-check
для достижения этой цели.
npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals
Еще один полезный список команд, который будет хранить точные номера версий в package.json
npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i
Ответ 18
Если вы используете yarn
, yarn upgrade-interactive
- это действительно гладкий инструмент, который позволяет вам просматривать ваши устаревшие зависимости, а затем выбирать те, которые вы хотите обновить.
Больше причин использовать пряжу по сравнению с npm
. Хех.
Ответ 19
Команды, которые я должен был использовать для обновления package.json
для NPM 3.10.10
:
npm install -g npm-check-updates
ncu -a
npm install
Фон:
Я использовал последнюю команду из @josh3736, но мой пакет package.json
не обновлялся. Затем я заметил текст описания при запуске npm-check-updates -u
:
Следующая заявка соответствует заявленному диапазону версий, но установленная версия отстает. Вы можете установить последнюю версию без изменения файла пакета с помощью обновления npm. Если вы все равно хотите обновить зависимость в вашем файле пакета, запустите ncu -a.
Чтение документации для npm-check -u pdates позволяет увидеть разницу:
https://www.npmjs.com/package/npm-check-updates
-u, - -u pgrade: перезаписать файл пакета
-a, -u pgradeAll: включить даже те зависимости, чья последняя версия удовлетворяет заявленной зависимости semver
ncu является псевдонимом для npm-check-updates
как видно из сообщения при вводе npm-check-updates -u
:
[INFO]: You can also use ncu as an alias
Ответ 20
Если вы используете пряжу, следующая команда обновляет все пакеты до последней версии:
yarn upgrade --latest
Из их документов:
Команда upgrade --latest
обновляет пакеты так же, как команда upgrade, но игнорирует диапазон версий, указанный в package.json. Вместо этого будет использоваться версия, указанная в последнем теге (возможно, обновление пакетов до основных версий).
Ответ 21
NPM-проверить-обновление
https://www.npmjs.com/package/npm-check-updates
npm-check-updates позволяет обновить ваши зависимости package.json до последних версий, независимо от существующих ограничений версии.
$ npm install -g npm-check-updates
$ ncu -u
зависимости обновлены! это все!
Ответ 22
Ncu - это новый псевдоним для проверки обновлений. При этом вам не нужно вручную обновлять номера версий ur в пакете. Json ncu делает это за вас. Следуйте приведенному ниже методу, если вы находитесь на машине Linux
sudo npm i -g npm-check-updates
// decide between -u or -a
ncu -u, --upgrade and overwrite package file
ncu -a, --upgradeAll include even those dependencies whose latest
version satisfies the declared server dependency
sudo npm install
Ответ 23
Один простой шаг:
$ npm install -g npm-check-updates && ncu -a && npm i
Ответ 24
Вышеупомянутые команды небезопасны, потому что вы можете сломать свой модуль при переключении версий. Вместо этого я рекомендую следующее
- Установите актуальную версию модулей текущих узлов в package.json, используя команду
npm shrinkwrap
. - Обновляйте каждую зависимость до последней версии, ЕСЛИ НЕ ПЕРЕРЫВАЕТ ВАШИ ИСПЫТАНИЯ, используя https://github.com/bahmutov/next-update инструмент командной строки
npm install -g next-update
// from your package
next-update
Ответ 25
Попробуйте выполнить следующую команду, если вы используете npm 5 и node 8
Обновление npm --save
Ответ 26
Альтернатива
"dependencies":{
"foo" : ">=1.4.5"
}
каждый раз, когда вы используете обновление npm, оно автоматически обновляется до последней версии.
Для более синтаксиса версии вы можете проверить здесь: https://www.npmjs.org/doc/misc/semver.html
Ответ 27
Решение без дополнительных пакетов
Измените каждую версию зависимостей на *
:
"dependencies": {
"react": "*",
"react-google-maps": "*"
}
Затем запустите npm update --save
.
Некоторые из ваших пакетов были обновлены, но некоторые не?
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "*"
}
Это сложная часть, это означает, что ваша локальная версия "реакции" была ниже, чем самая новая. В этом случае npm загружает и обновляет пакет "реагировать". Однако ваша локальная версия "maps-google-maps" такая же, как и самая новая.
Если вы все еще хотите "обновить" неизмененный *
, вам нужно удалить эти модули из папки node_modules
.
например. delete node_modules/react-google-maps
.
Наконец снова запустите npm update --save
.
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "^4.10.1"
}
Не забудьте запустить npm update --save-dev
, если вы хотите обновить зависимостей разработки.
Ответ 28
Это то, что я сделал, чтобы обновить все зависимости в package.json
до последнего:
npm install -g npm-check-updates
ncu -u --packageFile package.json
Ответ 29
Следующий код (который был принят) написал мне что-то вроде "он слишком долго бла-бла" и ничего не делал. Вероятно, с использованием глобального флага была проблема idk.
npm i -g npm-check-updates
ncu -u
npm install
Я решил использовать свой текстовый редактор и вместо этого следовать полу-ручному подходу.
Я скопировал список вроде этого (просто много дольше) от зависимостей Дев мой package.json
в notepad++ текстовой редактор:
"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",
Я установил режим поиска в регулярное выражение, использовал шаблон ^\s*"([^"]+)".*$
, Чтобы получить имя пакета и заменить его на npm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Нажмите "заменить все". Отступ был следующим:
npm uninstall browserify --save-dev
npm install browserify --save-dev
npm uninstall expect.js --save-dev
npm install expect.js --save-dev
npm uninstall karma --save-dev
npm install karma --save-dev
npm uninstall karma-browserify --save-dev
npm install karma-browserify --save-dev
Я скопировал его обратно в bash и нажал enter. Все было улучшено и отлично работает. Все это.
"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",
Я не думаю, что это очень важно, так как вы должны делать это только время от времени, но вы можете легко написать сценарий, который анализирует package.json
и обновляет ваши пакеты. Я думаю, что это лучше, потому что вы можете редактировать свой список, если вам нужно что-то особенное, например, сохранить текущую версию lib.
Ответ 30
Я решил это, увидев инструкции из https://github.com/tjunnone/npm-check-updates
$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name" #in case you want to update specific dependencies to latest