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

Версия Lense

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

Ответ 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 upgrade example

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

РЕДАКТИРОВАТЬ: Чтобы было ясно, это сторонний пакет, который должен быть установлен, прежде чем команда будет работать. Это не идет с самим npm:

npm install -g npm-upgrade

Затем из корня проекта, который имеет файл package.json:

npm-upgrade

Ответ 11

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

Повторное выражение для семантической версии

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

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

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

снимок экрана: выберите текст, который вы хотите заменить

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

снимок экрана: введите регулярное выражение semver выше

Замените все совпадения звездочкой.

снимок экрана: заменить версии пакета звездочкой

Выполнить 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

  1. delete /node_modules и package-lock.json(if you have any)

  2. запустить npm update. это обновит зависимости package.json до последней версии, основанной на semver.

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

Ответ 14

Если вы хотите использовать мягкий подход через красивый (для терминала) интерфейс интерактивных отчетов, я бы предложил использовать npm-check.

Это меньше хлопот и дает вам более последовательные знания и контроль над вашими обновлениями зависимостей.

Чтобы дать вам представление о том, что ждет здесь снимок экрана (вырезано со страницы git для проверки npm):

enter image description here

Ответ 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

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

Ответ 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