it-swarm.com.ru

Как мне обновить каждую зависимость в 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"
  }
}

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

1629
Raine Revere

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

1969
josh3736

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

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

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

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

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

331
Michael Cole

Чтобы обновить зависимость one до последней версии без необходимости вручную открывать 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]*

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


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

171
laconbass

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

Версия Lense

 enter image description here

70
GollyJer

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

"dependencies": {
  "foo": "latest"
}
55
Tobiasz Cudnik
  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"
},
44
Mr. Sun Lin

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

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

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

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
37
Tyler Davis

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

npm outdated

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

npm install [email protected] --save

Например:

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

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

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

npm install @progress/[email protected] --save
32
StepUp

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

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

 npm upgrade example

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

Правка: Для ясности, это сторонний пакет, который необходимо установить, прежде чем команда будет работать. Это не идет с самим npm:

npm install -g npm-upgrade

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

npm-upgrade
31
manncito

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

Семантическая версия 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

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

21
daniellmb

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

Обновление package.json 

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

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

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

14
Sibiraj

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

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

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

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

 enter image description here

12
TWright

Updtr!

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

https://github.com/peerigon/updtr

10
David Braun

Я использую 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
8
goksel

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

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

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

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

$ npm install -g npm-check-updates

$ ncu -u

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

8
аlex dykyі

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

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

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

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

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

5
Yangshun Tay

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

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

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

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

4
krunal shah

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

yarn upgrade --latest

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

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

4
fotijr

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

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

npx npm-check-updates -u && npm i
4
ilyakam

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

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

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

3
Haven

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

2
inf3rno

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

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

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

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

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

2
webkitfanz

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

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

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

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
Luca Steeb

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

Что я сделал:

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

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

1
miqrc

На сегодняшний день самый простой способ сделать это - использовать pnpm вместо npm и просто набрать:

pnpm update --latest

https://github.com/pnpm/pnpm/releases/tag/v3.2.0

0
Sumomo

Автоматическое обновление возможно с помощью NPM-скрипта:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i [email protected] -g",
        "npm-check-i-g": "npm i [email protected] -g",
        "eslint-i-g": "npm i [email protected] -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -i lru-cache",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g -i lru-cache",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

Для получения дополнительной информации и пошагового руководства: https://stackoverflow.com/a/34295664/462347

0
Mike B.