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

2014

Я скопировал 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 как комплексное решение этой проблемы. Наслаждайтесь!

Рейн Ревере
источник
2
Приятно видеть другой подход к этой проблеме. Мне очень нравится выход Салиты. Некоторые полезные функции, в которые я сейчас добавляю инструмент github.com/tjunnone/npm-check-updates, - это сохранение семантики управления версиями (например, 1.x или> 2.1.0) и фильтрация по имени / regex / devDeps-only.
Рейн Ревер
1
Здесь НУЖНЫ лучшие ответы. Очевидно, что с разрешением зависимостей вы не всегда можете иметь самую последнюю версию всего. Максимизация наибольшего количества последних версий модулей - это просто своего рода проблема оптимизации. Но NPM не знает, какие модули вы хотите быть самыми последними больше, чем другие. Было бы здорово, если бы было что-то вроде этого: npm update --latest xyz, где xyz - это модули, которые вы хотите использовать как можно более свежими, а все остальные модули будут иметь самую последнюю совместимую версию.
Александр Миллс
2
npm будет правильно обрабатывать конфликты версий между общими зависимостями, загружая правильную для каждой. Таким образом, если Dep A зависит от Dep C v1.0.0, а Dep B зависит от Dep C v2.0.0, каждый из них будет установлен и использован соответствующим образом. Таким образом, вы можете установить последнюю версию любых пакетов, которые вам нужны.
Рейн Ривер
Попробуйте это, чтобы форсировать апгрейд:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey
Я всегда проверяю этот ответ. Но я вижу, что он упал в результатах Google. Надеюсь, этот комментарий поможет поднять его актуальность!
Зак Смит

Ответы:

2395

Похоже, npm-check-updates - единственный способ сделать это сейчас.

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

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

josh3736
источник
13
@thefourtheye: Обычно вам не следует оставлять * в package.json, так как в итоге вы можете автоматически установить новую версию модуля с критическими изменениями, которые ломают ваше приложение. Так как мы используем --saveздесь, то *заменяется текущей версией каждого пакета.
josh3736
50
Я не могу заставить это работать. Что-то изменилось с npm с тех пор, как был опубликован этот ответ? Когда я использую подстановочный знак, а затем npm install --saveподстановочный знак остается в моем package.json.
Davidtheclark
15
К сожалению, использование updateне работает для меня. Я все еще остался с подстановочными знаками. Есть ли какая-либо документация по этому поводу, о которой вы знаете, или какие-либо другие ресурсы, на которые я мог бы взглянуть?
Davidtheclark
120
Немного стар, но это может помочь другим людям: github.com/tjunnone/npm-check-updates | Используйте npm install -g npm-check-updatesдля установки, затем npm-check-updatesдля проверки наличия обновлений в ваших зависимостях и npm-check-updates -uдля обновления ваших пакетов package.json. Тогда это просто, npm installи он будет загружать новые версии.
RaphaelDDL
5
Возможно, ваша проблема связана с тем, что вы пытаетесь обновить пакеты dev, набрав npm update --saveвместо npm update --save-dev.
Адриенденат
1036

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 
Etienne
источник
135
Это должно быть доступно непосредственно через саму команду npm, действительно лучшее решение на сегодняшний день для обновления зависимостей.
Мухаммед Ариф
7
Должен быть частью npm изначально, полностью согласен. Тем не менее, это не так, и это решение приходит как ветер. Спасибо.
Стефан
2
я полагаю, что вы, ребята, настаиваете [HARD], чтобы получить это в ядре npm?
enorl76
3
@ Batman Да, если вы не установили раньше. В противном случае используйте обновление npm. Ncu просто обновляет package.json. Он не устанавливает и не обновляет 'node_modules'.
Музаффер
1
бесполезный пакет, обновляя только часть пакетов ncu -a, не обновляя также package.json.
Александр Ким
385

Обновлено для последней версии NPM

нпм 2+ (узел 0,12+):


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 установил бы именно то, что мне нужно.


подробности

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

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

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

PS Пряжа отправляет ваш список пакетов в Facebook .

Майкл Коул
источник
13
это фактический правильный ответ. с десятками установленных deps, это определенно лучший способ
Angel S. Moreno
6
Исходя из опыта, совет всегда обновлять все пакеты может быть опасным.
alphadogg
1
Точно. Если вы создаете npm-shrinkwrap.jsonисходный код и делаете коммит при каждом обновлении, вы всегда можете «вернуться туда, где вы были». Я упустил из виду функцию термоусадочной пленки, когда начал.
Майкл Коул
21
это не отвечает на вопрос. Вопрос в том, как обновить последнюю версию. npm updateтолько обновления до версии semver, а не до последней.
Ган
1
Можете ли вы ответить, если есть альтернатива yarn upgrade package@version?
Бен Синклер
201

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

laconbass
источник
8
Это решение отлично. Быстрый и простой способ явного обновления одного пакета до последней версии без установки каких-либо новых модулей. Мне нравится npm-check-updates, но afaik пытается поддерживать все пакеты в актуальном состоянии, что не всегда то, что вы хотите.
Chev
это не работает для меняnpm install react-native-image-picker@* --save
Гарри Морено
1
@Chev: ncu может легко ориентироваться на один или несколько пакетов ncu express mocha chai. Вы также можете исключить пакеты с ncu -x mocha. Я согласен, что вышеизложенное - самое простое решение для обновления одного пакета.
Рейн Ревер
2
Я просто использовал нечто похожее, что сработало, возможно, из более поздних документов ... использует "последний" вместо "*"npm install {package-name}@latest {save flags}
Дрю Томас
1
Большое спасибо, это отличное решение и именно то, что я ищу. Это позволяет вам обновлять определенный пакет без необходимости обновлять каждую другую зависимость, которая может привести к непредвиденным проблемам!
Дани Уэб
90

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

Версия объектива

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

GollyJer
источник
2
Здесь есть возвышенная текстовая версия 3: github.com/yavorsky/Bump , хотя и немного медленная.
Александр Ким
4
Работал прекрасно, в случае, если это никому не понятно, это просто проверяет версии в вашем package.json на предмет последних версий репозитория npm и позволяет щелкнуть по версии, чтобы обновить текстовое содержимое в package.json. Затем вам нужно запустить «npm update», чтобы сообщить npm об установке новых версий.
MattG
2
Обратите внимание, что уже можно увидеть последнюю версию зависимостей пакета с кратким описанием во встроенном коде Visual Studio,
наведя указатель
1
Обратите внимание, что он не устанавливает пакеты автоматически при нажатии на ссылку кода линзы! Он просто обновляет текст версии package.json.
РА.
59

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

"dependencies": {
  "foo": "latest"
}
Тобиас Кудник
источник
10
Хорошо знать. Я предполагаю, что это, как правило, будет плохой практикой на любом производственном сайте, потому что он будет автоматически обновляться до обратно несовместимых версий. Синтаксис «~ 2» фиксирует вас в указанном основном номере версии, который после semver будет обратно совместим.
Рейн Ревер
1
Вы всегда можете заморозить Депс на продукт. Есть команда для этого. -2 звучит нормально.
Тобиас Кудник
5
Мне нравится использовать это вместе с npm shrinkwrapзаморозить Депс.
Даниэльмб
Если мы сделаем это, то как мы узнаем фактическую версию этого пакета? Скажем, у меня есть запись, которую я назвал, "react": "16.9.0"а затем я добавил последнюю и запустил npm i, после этого, как мне найти, какая версия реакции теперь есть в моем проекте? так "react":"latest"это , что осталось в моей package.json, а не количество , даже после того, как я сделалnpm i
theprogrammer
52
  1. Использовать *как версию для последних выпусков, в том числе нестабильных
  2. Использовать latestкак определение версии для последней стабильной версии
  3. Измените файл 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"
},
Г-н Сунь Лин
источник
2
Это лучший ответ.
Пеза
1
это должен был быть принятый ответ
EigenFool
по-прежнему самый безопасный подход. Хороший ответ.
klewis
43

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

Я бы использовал эту утилиту 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.
игорпавлов
Это самый простой способ сделать это. Никаких хлопот, никаких проблем. Работает как шарм. Все ваши deps обновляются и устанавливаются правильно. Thx
Yoraco Gonzales
38

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

npm outdated

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

npm install yourPackage@latest --save

Например:

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

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

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

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

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

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

пример обновления npm

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

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

npm install -g npm-upgrade

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

npm-upgrade
manncito
источник
Глядя на документы, кажется, что он был создан только для работы с локальными зависимостями
manncito
2
да, только что упоминал другим. Нет претензий к ответу :)
Мартин Шнайдер
2
Хм, npm-upgradeу меня не сработало, но сработало, npm upgradeи он обновил мой файл package.json, который был именно тем, что я искал.
Grandizer
Хм интересно, была ли ошибка? Идея, лежащая в основе использования, npm-upgradeзаключается в том, что вы можете точно увидеть, что обновляется, и выбрать, какие из них будут обновлены. npm upgradeможет хорошо работать для большинства людей, но иногда вам нужно иметь немного больше контроля при обновлении.
Маннсито
1
Вы также можете использовать это с npx: npx npm-upgrade- довольно круто! :)
рентген
22

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

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

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

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

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

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

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

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

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

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

Запустить npm update --save

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

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

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

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

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

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

TWright
источник
14

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

обновлять package.json

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

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

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

Сиберадж
источник
13

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

yarn upgrade --latest

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

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

fotijr
источник
1
Не обновляет зависимости в package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
13

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

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

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

Я использую, 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
Goksel
источник
Это ncu -uи не ncu -uaво второй последней строке. Я не могу редактировать, потому что одно изменение символа не допускается. Очень полезно, кстати.
Сохаил Ахмед
10

Updtr!

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

https://github.com/peerigon/updtr

Дэвид Браун
источник
9

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

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

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

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

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

[INFO]: You can also use ncu as an alias
Ogglas
источник
В npm-check-updates v3 -aэто поведение по умолчанию, а перезапись package.json оставлена ​​исключительно для -uопции.
Рейн Ревер
8

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

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

Яншун Тай
источник
Пряжа движется быстро, уже достигла отметки 1,0, и пользоваться ей чертовски приятно. Это должен быть новый выбранный ответ.
Джош Хабдас
1
Не обновляет зависимости в package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
5

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

  • Установите текущую версию модулей узла в package.json с помощью npm shrinkwrapкоманды.
  • Обновите каждую зависимость до последней версии, если она не нарушает ваши тесты с помощью инструмента командной строки https://github.com/bahmutov/next-update
npm install -g следующее обновление
// из вашей посылки
следующее обновление
глеб бахмутов
источник
1
Обратно несовместимые изменения должны быть защищены от активных проектов. OP больше заботится о запуске нового проекта, в котором вы хотите сломать вещи сейчас, а не позже, и иметь последние версии для работы.
Рейн Ревере
3

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

npm update - сохранить

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

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

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

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

inf3rno
источник
1
С npm-check-updates зависание терминала является известной проблемой в Windows. Попробуйте добавить --packageFile package.jsonтак, чтобы знать, не ждать stdin.
Рейн Ревер
@RaineRevere Спасибо!
inf3rno
3

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

Я нашел другое решение для последней версии NPM. То, что я хочу сделать, это заменить все зависимости "*" явным последним номером версии. Ни один из обсуждаемых методов не помог мне.

Что я сделал:

  1. Заменить все "*" на "^ 0.0.0"
  2. Запустить npm-check-updates -u

Все в package.json теперь обновлено до последней версии.

miqrc
источник
3

Если вы не хотите устанавливать глобальные npm-check-updates, вы можете просто запустить это:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"
Yukulélé
источник
2

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

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

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

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

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

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

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

Тогда беги npm update --save.

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

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

Это сложная часть, это означает, что ваша локальная версия «реакции» была ниже, чем самая новая. В этом случае npm скачал и обновил пакет «прореагировать». Однако ваша локальная версия «response-google-maps» такая же, как и самая новая.

Если вы все еще хотите «обновить» без изменений *, вы должны удалить эти модули из node_modulesпапки.

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

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

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

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

Алексей Володько
источник
1

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

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

Greenkeeper PR 1 Greenkeeper PR 2

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

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

Лука Стиб
источник
1
  • нпм устарел
  • обновление npm

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

webkitfanz
источник