Я скопировал 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, что является отличным решением этой проблемы.
Похоже, что 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
. В нем будут перечислены все установленные зависимости, которые имеют более новые версии.
npm outdated
кажется, не работает для меня, если я не понимаю, что он делает. Я изменил асинхронный режим на «0.2.5», переустановил его и запустил npm outdated
и он вернул пустую строку.
*
не рекомендуется package.json.nodejitsu.com . Это какая-то конкретная причина?
npm-check-updates
- это утилита, которая автоматически настраивает package.json с последней версией всех зависимостей
см. https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
Вещи немного изменились, поскольку эти ответы были изначально написаны.
npm outdated
+ npm update
+ npm shrinkwrap
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, все установки будут использовать одни и те же версии.
Это способ перехода от разработки (все обновления, все время) к производству (никто ничего не трогает).
Чтобы обновить зависимость 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
для таких вещей;)
npm install react-native-image-picker@* --save
Если вы используете код Visual Studio в качестве своей IDE, это забавное небольшое расширение, чтобы сделать обновление package.json
одним щелчком мыши процесс.
Это работает с номером npm 1.3.15.
"dependencies": {
"foo": "latest"
}
*
как версию для последних версий, включая нестабильныеlatest
как определение версии для последней стабильной версии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
rm -rf node_modules
перед 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-upgrade. Это простая утилита командной строки, которая просматривает все ваши зависимости и позволяет вам увидеть текущую версию по сравнению с последней версией и обновить, если хотите.
Вот скриншот того, что происходит после запуска npm-upgrade
в корне вашего проекта (рядом с файлом package.json
):
Для каждой зависимости вы можете выбрать обновление, игнорирование, просмотр журнала изменений или завершение процесса. До сих пор это отлично сработало.
РЕДАКТИРОВАТЬ: Чтобы было ясно, что это сторонний пакет, который должен быть установлен, прежде чем команда будет работать. Это не идет с самим npm:
npm install -g npm-upgrade
Затем из корня проекта, который имеет файл package.json:
npm-upgrade
Вот базовое регулярное выражение для соответствия номерам семантической версии, чтобы вы могли быстро заменить их звездочкой.
([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Выберите версии пакета, которые вы хотите заменить в файле JSON.
Введите регулярное выражение выше и убедитесь, что оно соответствует правильному тексту.
Замените все совпадения звездочкой.
Выполнить npm update --save
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
и нажимать ctrl+d
несколько раз, пока не выделите их все, затем перейти к номеру версии (нажмите стрелку вправо 2 раза) и нажмите клавишу Ctrl пробел, затем напишите "*"
Эта функция была введена в npm v5
. обновить до npm, используя npm install -g npm@latest
и
обновить package.json
delete /node_modules
и package-lock.json(if you have any)
запустить npm update
. это обновит зависимости package.json до последней версии, основанной на semver.
обновить до самой последней версии. вы можете пойти с npm-check-updates
Недавно мне пришлось обновить несколько проектов, которые использовали 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
awk
: npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Updtr!
Исходя из npm устаревшего, updtr устанавливает последнюю версию и запускает npm-тест для каждой зависимости. Если тест будет успешным, updtr сохранит номер новой версии вашего пакета .json. Однако, если тест не удается, updtr отбрасывает свои изменения.
Если вы хотите использовать мягкий подход через красивый (для терминала) интерфейс интерактивных отчетов, я бы предложил использовать npm-check.
Это меньше хлопот и дает вам более последовательные знания и контроль над вашими обновлениями зависимостей.
Чтобы дать вам представление о том, что ждет здесь снимок экрана (вырезано со страницы git для проверки npm):
NPM-проверить-обновление
https://www.npmjs.com/package/npm-check-updates
npm-check-updates позволяет обновить ваши зависимости package.json до последних версий, независимо от существующих ограничений версии.
$ npm install -g npm-check-updates
$ ncu -u
зависимости обновлены! это все!
Команды, которые я должен был использовать для обновления 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
Я использую 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
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
ncu -u
НЕ -a
обновит файл package.json.
Один простой шаг:
$ npm install -g npm-check-updates && ncu -a && npm i
Если вы используете yarn
, yarn upgrade-interactive
- это действительно гладкий инструмент, который позволяет вам просматривать ваши устаревшие зависимости, а затем выбирать те, которые вы хотите обновить.
Больше причин использовать пряжу по сравнению с npm
. Хех.
Вышеупомянутые команды небезопасны, потому что вы можете сломать свой модуль при переключении версий. Вместо этого я рекомендую следующее
npm shrinkwrap
.npm install -g next-update // from your package next-update
Попробуйте выполнить следующую команду, если вы используете npm 5 и node 8
Обновление npm --save
update
, похоже, не влияет на зависимости, выходящие за рамки исходного определения. Если package.json
объявит "1.2.3"
точно, вы не получите 1.2.4
. Это может быть хорошо или плохо :)
Если вы используете пряжу, следующая команда обновляет все пакеты до их последней версии:
yarn upgrade --latest
Из своих документов:
Команда
upgrade --latest
обновляет пакеты так же, как и команда обновления, но игнорирует диапазон версий, указанный в package.json. Вместо этого будет использоваться версия, указанная последним тегом (возможно, обновление пакетов в основных версиях).
Альтернатива
"dependencies":{
"foo" : ">=1.4.5"
}
каждый раз, когда вы используете обновление npm, оно автоматически обновляется до последней версии. Для более синтаксиса версии вы можете проверить здесь: https://www.npmjs.org/doc/misc/semver.html
Это то, что я сделал, чтобы обновить все зависимости в package.json
до последнего:
npm install -g npm-check-updates
ncu -u --packageFile package.json
Должны быть доступны самые последние версии, совместимые с вашим приложением. Но не последние версии.
Решение без дополнительных пакетов
Измените каждую версию зависимостей на *
:
"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
, если вы хотите обновить зависимостей разработки.
Я решил это, увидев инструкции из 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
Следующий код (который был принят) написал мне что-то вроде "он слишком долго бла-бла" и ничего не делал. Вероятно, с использованием глобального флага была проблема 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.
Гринкипер, если вы используете Github. https://greenkeeper.io/
Это интеграция Github и невероятно проста в настройке. Когда он установлен, он автоматически создает запросы на загрузку в репозиториях, которые вы указываете (или все, если хотите), и всегда сохраняет ваш код в актуальном состоянии, не заставляя вас делать что-либо вручную. PR должны затем запускать сборку на службе CI, и в зависимости от успешной или неудачной проверки вы можете продолжать выяснять, что вызывает проблему или когда CI проходит, просто слияние PR.
Внизу вы можете увидеть, что первая сборка завершилась с ошибкой сначала и после фиксации ( "обновление до node v6.9" ), тесты проходят, поэтому я могу, наконец, объединить PR. Поставляется с большим количеством эможи тоже.
Другой альтернативой будет https://dependencyci.com/, однако я не тестировал ее интенсивно. После первого взгляда Greenkeeper выглядит лучше в целом IMO и имеет лучшую интеграцию.
Начиная с версии 5.2.0 npm, есть способ выполнить это в одной строке без установки каких-либо дополнительных пакетов в глобальный реестр npm или локально в ваше приложение. Это можно сделать, используя новую утилиту npx
которая поставляется вместе с npm. (Нажмите здесь, чтобы узнать больше.)
Запустите следующую команду в корне вашего проекта:
npx npm-check-updates -u
npm install
чтобы фактически загрузить новые зависимости. Так что я думаю, что это просто обновляет package.json, если я что-то упустил
npm install
после обновления зависимостей.