Как обновить каждую зависимость в пакете.json до последней версии?

Я скопировал пакет.json из другого проекта и теперь хочет поднять все зависимости до их последних версий, так как это свежий проект, и я не против что-то исправить, если он сломается.

какой самый простой способ сделать это?

лучший способ, который я знаю сейчас, - это запустить обновить пакет.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"
  }
}

Я теперь сотрудник на npm-проверка-обновления, которая является отличным решением этой проблемы.

30 ответов


выглядит так:npm-проверка-обновления это единственный способ сделать это сейчас.

npm i -g npm-check-updates
ncu -u
npm install

на НПМ

просто измените версию каждой зависимости на *, затем запустить 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. В нем будут перечислены все установленные зависимости, которые имеют более новые версии.


npm-check-updates - это утилита, которая автоматически изменяет пакет.json с последняя версия all dependencies

см.https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

TLDR; (обновлено для более новых версий NPM)

все немного изменилось с тех пор, как эти ответы были первоначально написаны.

npm 2+:npm outdated+npm update+npm shrinkwrap

старшего НПМ: npm-check-updates + пакет npm shrinkwrap

обязательно сожмите свои deps, или вы можете закончить с мертвым проектом. На днях я вытащил проект, и он не работал, потому что мои deps были устаревшими/обновленными/беспорядком. Если бы я сжался, НПМ бы установил именно то, что мне нужно.


подробности

для любопытных, которые делают это так далеко, вот что я рекомендую:

использовать 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 я получил некоторые предупреждения о зависимостях)

$ 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 все установки будут использовать одинаковые версии.

это способ перехода от разработки (все обновления, все время) к производству (никто ничего не трогает).


обновить один зависимость от последней версии без необходимости вручную открывать package.json и изменить его, вы можете запустить

npm install {package-name}@* {save flags?}

то есть

npm install express@* --save

Для справки:npm-установить


как отметил пользователь Vespakoen при отклоненном редактировании также можно обновить несколько пакетов одновременно следующим образом:

npm install --save package-nave@* other-package@* whatever-thing@*

он также аппортирует ОДН-вкладыш для раковины основанной на npm outdated. Видеть редактировать для кода и объяснение.


PS: Я также ненавижу вручную редактировать package.json для таких вещей ;)


Если вы используете Код Visual Studio как ваша IDE, это забавное небольшое расширение для обновления package.json процесс одним щелчком мыши.

Версия Lense

enter image description here


это работает с npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

  1. использовать * в качестве версии для последних выпусков, включая unstable
  2. использовать latest как определение версии для последней стабильной версии
  3. изменить пакет.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"
},

единственное предостережение, которое я нашел с лучшим ответом выше, заключается в том, что он обновляет модули до последней версии. Это означает, что он может обновиться до нестабильной альфа-сборки.

Я бы использовал эту утилиту npm-check-updates. Моя группа использовала этот инструмент, и он эффективно работал, устанавливая стабильные обновления.

Как сказал Этьен выше: установите и запустите с этим:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

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

npm outdated

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

npm install yourPackage@latest --save

например:

мой package.json файл имеет зависимость:

"@progress/kendo-angular-dateinputs": "^1.3.1",

затем я должен написать:

npm install @progress/kendo-angular-dateinputs@latest --save

мне очень нравится, как npm-обновление строительство. Это простая утилита командной строки, которая проходит через все зависимости и позволяет увидеть текущую версию по сравнению с последней версией и обновить, если требуется.

вот скриншот того, что происходит после запуска npm-upgrade в корне вашего проекта (рядом с ):

npm upgrade example

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


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

Семантическая Версия Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

как использовать

выберите пакеты, которые вы хотите заменить в файле JSON.

screenshot:select the text you want to replace

введите регулярное выражение выше и убедитесь, что оно соответствует правильному тексту.

screenshot:input the semver regex above

заменить все матчи с звездочка.

screenshot:replace package versions with an asterisk

Run npm update --save


недавно мне пришлось обновить несколько проектов, которые использовали npm и пакет.json для их gruntfile.Яш магии. Следующая команда bash (многострочная команда) хорошо работала для меня:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install  --save-dev

идея здесь: Чтобы трубить npm outdated выводится как json, в jq
(jq-это инструмент синтаксического анализа/запроса командной строки JSON)
(обратите внимание на использование


Updtr!

на основе устаревшего npm updtr устанавливает последнюю версию и запускает тест npm для каждой зависимости. Если тест прошел успешно, updtr сохраняет новый номер версии в пакете.формат JSON. Однако при сбое теста updtr выполняет откат изменений.

https://github.com/peerigon/updtr


Я использую npm-check в архиве этого.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

enter image description here

еще один полезный список команд, который будет держать точные номера версий в 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

команды, которые я должен был использовать для обновления 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 -а.

чтение документации для npm-check-updates вы можете увидеть разницу:

https://www.npmjs.com/package/npm-check-updates

- u, --upgrade: перезаписать файл пакета

- a, --upgradeAll: включите даже те зависимости, последняя версия которых удовлетворяет объявленной зависимости semver

нде это псевдоним npm-check-updates как видно из сообщения при вводе npm-check-updates -u:

[INFO]: You can also use ncu as an alias

очень поздний ответ. но может кому-то помочь.

эта функция была введена в npm v5. обновление до npm с помощью npm install -g npm@latest и

обновить package.json

  1. удалить /node_modules и package-lock.json (if you have any)

  2. run npm update. это обновит пакет.json до последней версии с установленными зависимостями.

для обновления до последней версии. вы можете пойти с npm-check-updates


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

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

  • установите фактическую версию модулей текущего узла в пакет.JSON с использованием

Если вы используете yarn, yarn upgrade-interactive - это действительно гладкий инструмент, который позволяет просматривать устаревшие зависимости, а затем выбирать, какие из них вы хотите обновить.

больше причин использовать пряжу над npm. Хех.


один легкий шаг:

$ npm install -g npm-check-updates && ncu -a && npm i

попробуйте выполнить команду, если вы используете npm 5 и узел 8

обновление npm --сохранить


альтернатива

"dependencies":{
    "foo" : ">=1.4.5"
}

каждый раз, когда вы используете обновление npm, оно автоматически обновляется до последней версии. Для более синтаксис версия, вы можете проверить здесь: https://www.npmjs.org/doc/misc/semver.html


npm-проверка-обновления

https://www.npmjs.com/package/npm-check-updates

npm-check-updates позволяет обновить пакет.формат JSON зависимости от последних версий, независимо от существующих ограничений версий.

$ npm install -g npm-check-updates

$ ncu -u

обновление зависимостей! вот и все!


решение без дополнительных пакетов

измените версию каждой зависимости на *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

затем запустите npm update --save.

некоторые из ваших пакетов были обновлены, но некоторые нет?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

это сложная часть, это означает, что ваша локальная версия "react" была ниже, чем новейшая. В этом случае npm скачал и обновил пакет" react". Однако ваша локальная версия "react-google-maps" совпадает с новый.

если вы все еще хотите "обновление" без изменений *, вы должны удалить эти модули .

например, удалить node_modules/react-google-maps.

наконец-то снова запустить npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

не забудьте запустить npm update --save-dev если вы хотите обновить зависимостей развития.


  • npm устарел
  • обновление npm

должен получить вам последние версии, совместимые с вашим приложением. Но не последние версии.


это то, что я сделал, чтобы обновить все зависимости в package.json до последней:

npm install -g npm-check-updates
ncu -u --packageFile package.json 

Greenkeeper, если вы используете Github. https://greenkeeper.io/

это интеграция Github и невероятно легко настроить. При установке он автоматически создает запросы pull в репозиториях, которые вы указываете (или все, если хотите), и сохраняет ваш код всегда в актуальном состоянии, не заставляя вас делать что-либо вручную. Затем PRs должен инициировать сборку на службе CI, и в зависимости от успешной или неудачной проверки вы можете продолжать выяснять, что вызывает вопрос или когда CI проходит просто объединить PR.

greenkeeper PR 1 greenkeeper PR 2

внизу вы можете видеть, что первая сборка не удалась сначала и после фиксации ("обновление до узла v6.9") тесты проходят, чтобы я мог, наконец, объединить PR. Поставляется с большим количеством смайликов, тоже.

Другой альтернативой было бы https://dependencyci.com/, однако я не тестировал его интенсивно. После первого взгляда Greenkeeper выглядит лучше в генерал ИМО и имеет лучшую интеграцию.


следующий код (который был принят) написал мне что-то вроде "это занимает слишком много бла-бла" и ничего не сделал. Вероятно, использование глобального флага было проблемой, idk.

npm i -g npm-check-updates
ncu -u
npm install

я решил использовать свой текстовый редактор и вместо этого следовать полуавтоматическому подходу.

Я скопировал такой список (только намного дольше) из зависимостей dev моего package.json в текстовый редактор notepad++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Я установил режим поиска в регулярное выражение, использовал ^\s*"([^"]+)".*$ шаблон, чтобы получить имя пакета и заменить его на npm uninstall --save-dev \nnpm install --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.


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

yarn upgrade --latest

из них docs:

на upgrade --latest команда обновляет пакеты так же, как команда обновления, но игнорирует диапазон версий, указанный в пакете.формат JSON. Вместо этого будет использоваться версия, указанная последним тегом (потенциально обновление пакетов по основным версиям).


Я решил это, увидев инструкции из 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