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

1687

Я скопировал 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"
  }
}

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

  • 7
    Каждый раз, когда я в конечном итоге на этот вопрос, потому что я искал github.com/tbranyen/salita . Простой инструмент CLI для обновления всех зависимостей до последней версии.
  • 2
    Приятно видеть другой подход к этой проблеме. Мне очень нравится выход Салиты. Некоторые полезные функции, в которые я сейчас добавляю инструмент github.com/tjunnone/npm-check-updates, - это сохранение семантики управления версиями (например, 1.x или> 2.1.0) и фильтрация по имени / regex / devDeps-only.
Показать ещё 2 комментария
Теги:
npm

32 ответа

1908
Лучший ответ

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

  • 1
    Отличный ответ, спасибо. npm outdated кажется, не работает для меня, если я не понимаю, что он делает. Я изменил асинхронный режим на «0.2.5», переустановил его и запустил npm outdated и он вернул пустую строку.
  • 0
    Похоже, использование * не рекомендуется package.json.nodejitsu.com . Это какая-то конкретная причина?
Показать ещё 25 комментариев
942

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

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

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 
  • 109
    Это должно быть доступно непосредственно через саму команду npm, действительно лучшее решение на данный момент для обновления зависимостей.
  • 6
    Должен быть частью npm изначально, полностью согласен. Тем не менее, это не так, и это решение приходит как ветер. Спасибо.
Показать ещё 12 комментариев
306

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

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

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

Старые npm: npm-check-updates пакет + npm shrinkwrap

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


Подробнее

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

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

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

  • 11
    это фактический правильный ответ. с десятками установленных deps это лучший способ
  • 4
    Исходя из опыта, совет всегда обновлять все пакеты может быть опасным.
Показать ещё 4 комментария
179

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

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

то есть.

npm install express@* --save

Для справки npm-install


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

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

Он также поддерживает однострочный слой для оболочки на основе npm outdated. См. редактировать для кода и объяснений.


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

  • 7
    Это решение отлично. Быстрый и простой способ явного обновления одного пакета до последней версии без установки каких-либо новых модулей. Мне нравится npm-check-updates, но afaik пытается поддерживать все пакеты в актуальном состоянии, что не всегда то, что вы хотите.
  • 0
    это не работает для меня, npm install react-native-image-picker@* --save
Показать ещё 5 комментариев
64

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

Версия Lense

Изображение 2112

  • 1
    Это то, что мне нужно. большое спасибо ты спас мне день
  • 2
    Здесь есть возвышенная текстовая версия 3: github.com/yavorsky/Bump , хотя и немного медленная.
Показать ещё 2 комментария
53

Это работает с номером npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
  • 10
    Хорошо знать. Я предполагаю, что это, как правило, будет плохой практикой на любом производственном сайте, потому что он будет автоматически обновляться до обратно несовместимых версий. Синтаксис «~ 2» фиксирует вас в указанном основном номере версии, который после semver будет обратно совместим.
  • 1
    Вы всегда можете заморозить Депс на продукт. Есть команда для этого. -2 звучит нормально.
Показать ещё 1 комментарий
42
  • Используйте * как версию для последних версий, включая нестабильные
  • Используйте 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"
},
  • 3
    И не забудьте обновить npm --save
  • 0
    Это лучший ответ.
37

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

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

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

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
  • 3
    rm -rf node_modules перед npm install избавились от некоторых предупреждений о зависимостях для меня.
  • 1
    На всякий случай, если у вас есть «*» в package.json, просто измените его на «0», «0.0» или «0.0.0» перед запуском npm-check-updates.
Показать ещё 1 комментарий
30

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

npm outdated

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

npm install yourPackage@latest --save

Например:

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

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

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

npm install @progress/kendo-angular-dateinputs@latest --save
  • 0
    Хорошо, но похоже, что --save (или --save-dev) не является обязательным для обновления.
29

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

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

Изображение 2113

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

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

npm install -g npm-upgrade

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

npm-upgrade
  • 1
    не работает с глобальными пакетами
  • 0
    Глядя на документы, кажется, что он был построен только для работы с локальными зависимостями
Показать ещё 5 комментариев
20

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

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

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

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

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

Изображение 2114

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

Изображение 2115

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

Изображение 2116

Выполнить npm update --save

  • 0
    не, когда есть номер в имени пакета. то есть: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Может быть, искать цитату / двойную кавычку в начале: ('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
  • 0
    В любом редакторе, который поддерживает несколько кареток (например, Sublime Text), вы можете выбрать первый : и нажимать ctrl+d несколько раз, пока не выделите их все, затем перейти к номеру версии (нажмите стрелку вправо 2 раза) и нажмите клавишу Ctrl пробел, затем напишите "*"
13

Эта функция была введена в npm v5. обновить до npm, используя npm install -g npm@latest и

обновить package.json

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

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

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

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
  • 0
    Я люблю jq и использую его почти каждый день, но вместо этого я использую простой awk : npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
  • 1
    Я использую cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
10

Updtr!

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

https://github.com/peerigon/updtr

9

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

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

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

Изображение 2117

  • 2
    Используется прямо сейчас в проекте! Ницца!
  • 1
    Рад это слышать @TurqSpl!
8

NPM-проверить-обновление

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

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

$ npm install -g npm-check-updates

$ ncu -u

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

8

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

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

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

Изображение 2118

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

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
  • 0
    Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
  • 0
    Вот что говорит: ncu -u НЕ -a обновит файл package.json.
Показать ещё 1 комментарий
6

Один простой шаг:

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

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

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

  • 0
    Пряжа движется быстро, уже набрала 1,0, и пользоваться ею чертовски приятно. Это должен быть новый выбранный ответ.
5

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

  • Установите актуальную версию модулей текущих узлов в package.json, используя команду npm shrinkwrap.
  • Обновляйте каждую зависимость до последней версии, ЕСЛИ НЕ ПЕРЕРЫВАЕТ ВАШИ ИСПЫТАНИЯ, используя https://github.com/bahmutov/next-update инструмент командной строки
npm install -g next-update
// from your package
next-update
  • 1
    Обратно несовместимые изменения должны быть защищены от активных проектов. ОП больше заботится о запуске нового проекта, в котором вы хотите сломать вещи сейчас, а не позже, и иметь последние версии для работы.
4

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

Обновление npm --save

  • 1
    Команда update , похоже, не влияет на зависимости, выходящие за рамки исходного определения. Если package.json объявит "1.2.3" точно, вы не получите 1.2.4 . Это может быть хорошо или плохо :)
3

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

yarn upgrade --latest

Из своих документов:

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

3

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

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

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

  • 0
    Одной из причин создания версий является предотвращение несовместимых изменений в более поздних версиях. Я бы рекомендовал против этого или «*» номера версий. ОП связана с облегчением процесса при сохранении контроля над тем, когда он происходит.
2

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

npm install -g npm-check-updates
ncu -u --packageFile package.json 
2
  • npm устаревший
  • Обновление npm

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

  • 0
    не работает для меня
2

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

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

"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, если вы хотите обновить зависимостей разработки.

1

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

Следующий код (который был принят) написал мне что-то вроде "он слишком долго бла-бла" и ничего не делал. Вероятно, с использованием глобального флага была проблема 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.

1

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

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

Изображение 2119 Изображение 2120

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

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

0

Начиная с версии 5.2.0 npm, есть способ выполнить это в одной строке без установки каких-либо дополнительных пакетов в глобальный реестр npm или локально в ваше приложение. Это можно сделать, используя новую утилиту npx которая поставляется вместе с npm. (Нажмите здесь, чтобы узнать больше.)

Запустите следующую команду в корне вашего проекта:

npx npm-check-updates -u 
  • 0
    Я только что попробовал это, и это работает ... за исключением того, что мне нужно было запустить npm install чтобы фактически загрузить новые зависимости. Так что я думаю, что это просто обновляет package.json, если я что-то упустил
  • 0
    @owsega, ты абсолютно прав, спасибо! Я изменил свой ответ, чтобы также запустить npm install после обновления зависимостей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню