npm проверьте и при необходимости обновите пакет

Нам нужно интегрировать средство запуска тестов Karma в TeamCity, и для этого я хотел бы дать системным инженерам небольшой скрипт (powershell или что-то еще), который:

  1. возьмите желаемый номер версии из какого-нибудь конфигурационного файла (думаю, я могу поместить его как комментарий прямо в karma.conf.js)

  2. проверьте, установлена ​​ли определенная версия karma runner в глобальном репо npm

  3. если это не так, или установленная версия старше, чем хотелось бы: подберите и установите нужную версию

  4. запустите это: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Итак, мой реальный вопрос: «как можно проверить скрипт, если установлена ​​желаемая версия пакета?». Следует ли вам проводить проверку или просто каждый раз звонить npm -g install?

Я не хочу всегда проверять и устанавливать последнюю доступную версию, потому что другие значения конфигурации могут стать несовместимыми


person iLemming    schedule 13.05.2013    source источник


Ответы (14)


Чтобы проверить, является ли какой-либо модуль в проекте «старым»:

npm outdated

'устаревший' проверит каждый модуль, определенный в package.json, и увидит, есть ли более новая версия в NPM. реестр.

Например, предположим, что xml2js 0.2.6 (расположенный в node_modules в текущем проекте) устарел, потому что существует более новая версия (0.2.7). Вы бы увидели:

[email protected] node_modules/xml2js current=0.2.6

Чтобы обновить все зависимости, если вы уверены, что это желательно:

npm update

Или, чтобы обновить одну зависимость, например xml2js:

npm update xml2js
person dublx    schedule 13.05.2013
comment
Будьте осторожны с npm update, особенно с npm update -g ... это не то, чего от него ожидает большинство! См .: github.com/npm/npm/issues/6247 и gist.github.com/othiym23/4ac31155da23962afd0e - person jbandi; 23.12.2014
comment
@jbandi Начиная с [email protected], npm -g update снова можно использовать безопасно. github.com/npm/npm/issues/6247#issuecomment-92182814 - person Chuck Le Butt; 06.07.2016
comment
Имейте в виду, что обновление npm не обновит ваш файл package.json, как указано в ответе @Erik Olson. - person Ehtesham Hasan; 26.10.2017
comment
As of [email protected], 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html - person Sidney; 02.04.2019
comment
только что сделал npm update на моем npm 5.6.0 и сломал весь код; к счастью, перед этим я сделал резервную копию своих файлов - person Armand; 18.07.2020

npm outdated будет определять пакеты, которые следует обновить, и npm update <package name> может использоваться для обновления каждого пакета. Но до [email protected] npm update <package name> не будет обновлять версии в вашем package.json, что является проблемой.

Лучший рабочий процесс - это:

  1. Определить устаревшие пакеты
  2. Обновите версии в вашем package.json
  3. Запустите npm update, чтобы установить последние версии каждого пакета.

Ознакомьтесь с npm-check-updates, чтобы помочь с этим рабочим процессом.

  • Установите npm-check-updates.
  • Запустите npm-check-updates, чтобы узнать, какие пакеты устарели (в основном то же самое, что и запуск npm outdated)
  • Запустите npm-check-updates -u, чтобы обновить все версии в вашем package.json (это волшебный соус)
  • Запустите npm update как обычно, чтобы установить новые версии ваших пакетов на основе обновленного package.json.
person Erik Olson    schedule 01.06.2014
comment
npm outdated покажет ВСЕ пакеты ... даже внутри других пакетов ... но они не будут обновляться с помощью этой процедуры, поэтому они всегда будут отображаться ... поэтому просто используйте npm-check-updates (как вы на самом деле рекомендовали), который показывает только основные пакеты из package.json ... это актуально - person davidhq; 07.02.2015
comment
С пряжей это намного проще, просто введите «обновление пряжи». - person Christopher Grigg; 09.04.2018
comment
Почему я должен установить диспетчер обновлений, чтобы управлять своим диспетчером пакетов? Разве мы не согласны, что это глупо? Это должно быть так просто, как npm install --all-outdated, но это не так ... - person ADJenks; 24.01.2019
comment
Вы всегда можете запустить npm update --save package_name, чтобы сохранить последнее изменение в package.json. - person trungk18; 09.04.2019
comment
Эрик, не могли бы вы ответить на этот связанный вопрос SO, потому что меня все еще немного смущает разница между обеими командами, то есть npm update vs npm-check-updates? - person João Pimentel Ferreira; 17.07.2019
comment
@ADJenks, потому что npm-check-updates делает серьезные обновления, согласно semver, которые могут иметь критические изменения, тогда как npm update делает только безопасные второстепенные и исправляющие обновления. См .: stackoverflow.com/a/48917961/1243247 - person João Pimentel Ferreira; 15.07.2021
comment
@ JoãoPimentelFerreira Я понимаю, что делать небольшие исправления безопасно, но в конечном итоге разработчики хотят проверять последние версии контролируемым образом. Есть общая потребность и желание сделать это, о чем свидетельствует наличие инструментов для этого, поэтому я думаю, что функция должна быть просто встроена. Вы не думаете, что она должна быть встроена? Я думаю, что флаг с именем --force-update-max был бы очень полезен. Если они хотят, они могут дать ему имя, чтобы предупреждать людей, например, как response использует dangerousSetInnerHTML для установки необработанного html. Это немного снисходительно, но снимает с них ответственность за ущерб. - person ADJenks; 15.07.2021
comment
@ADJenks да, я согласен с вами, что это должно быть что-то встроенное, но не по умолчанию - person João Pimentel Ferreira; 16.07.2021
comment
@ JoãoPimentelFerreira Да, я ничего не сказал о том, чтобы сделать его опцией по умолчанию, я предлагал добавить флаг --all-outdated, который является созданным мной флагом, которого не существует. Дело в том, что я думаю, что должен быть флаг, который делает это. Я дал ему более подходящее название в своем другом ответе вам, --force-update-max, но в моем первоначальном комментарии мои намерения были такими же. Флаг для обновления всего до максимума, это было бы здорово. - person ADJenks; 18.07.2021
comment
@ADJenks: да, я согласен, что --force-update-max было бы лучше, потому что должно быть ясно, что критические изменения могут произойти в соответствии с semver. Согласно semver основные обновления не имеют обратной совместимости. Хотя большинство разработчиков игнорируют эти спецификации. - person João Pimentel Ferreira; 18.07.2021

Также есть свежий модуль под названием npm-check:

npm-check

Проверьте наличие устаревших, неправильных и неиспользуемых зависимостей.

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

Он также предоставляет удобный интерактивный способ обновления зависимостей с помощью npm-check -u.

person alecxe    schedule 14.12.2014

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

$ npm i -g npm-check-updates && ncu -u && npm i

Это все. Все версии пакетов в package.json будут последними основными версиями.

Редактировать:

Что здесь происходит?

  1. Установка пакета, который проверяет обновления за вас.

  2. Используйте этот пакет для обновления всех версий пакета в вашем package.json (-u сокращенно от --updateAll).

  3. Установите все новые версии пакетов.

person Matt    schedule 13.04.2017
comment
@imnickvaughn ncu означает обновления с проверкой узлов, а -a - это параметр «upgradeAll». Найдите все варианты здесь: npmjs.com/package/npm-check-updates - person Arian Acosta; 05.06.2018
comment
А что, если я хочу сделать это одной строкой, не используя другой пакет, например ncu? - person ADJenks; 24.01.2019
comment
Или без глобальной установки npx -p npm-check-updates ncu -u - person entozoon; 30.04.2020
comment
npm-check-updates делает серьезные обновления, согласно semver, которые могут иметь критические изменения. Используйте его осторожно: stackoverflow.com/a/48917961/1243247 - person João Pimentel Ferreira; 15.07.2021

  • Чтобы обновить один локальный пакет:

    1. Сначала узнайте свои устаревшие пакеты:

      npm outdated

    2. Затем обновите пакет или пакеты, которые вы хотите, вручную как:

      npm update --save package_name

Таким образом, нет необходимости обновлять ваш локальный package.json файл.

Обратите внимание, что это обновит ваш пакет до последней версии.

  • Если вы напишете какую-то версию в своем package.json файле и выполните:

    npm update package_name

    В этом случае вы получите только следующую (желаемую) стабильную версию той версии, которую вы записали в своем package.json файле.

А с npm list (package_name) вы можете узнать текущую версию ваших локальных пакетов.

person Watchmaker    schedule 02.09.2015

Никаких дополнительных пакетов, просто проверить устаревшие и обновить те, которые есть, эта команда сделает:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)

person MikeMajara    schedule 28.03.2019
comment
Это отличный ответ, потому что его можно поместить в любой сценарий оболочки для автоматизации этого шага, не полагаясь на установку каких-либо дополнительных пакетов. - person Jankapunkt; 18.03.2020

Команды NPM для обновления или исправления уязвимостей в некоторых файлах манифеста зависимостей

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

    npm audit

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

    npm audit fix

  • # P3 #
    # P4 #
  • Если вы не хотите использовать исправление принудительного аудита, вы можете вручную исправить версии зависимостей, изменив их в файлах package-lock.json и package.json. Тогда беги

npm update && npm upgrade

person Smit Patel    schedule 23.10.2018

Проверить устаревшие пакеты

npm outdated

Проверьте и выберите пакеты для обновления

npx npm-check -u

устаревший img npm

npx npm-check -u img

person Long Tran    schedule 11.09.2018

Начиная с [email protected]+, вы можете просто сделать:

npm update <package name>

Это автоматически обновит файл package.json. Нам не нужно обновлять последнюю версию вручную, а затем использовать npm update <package name>

Вы все еще можете получить старое поведение, используя

npm update --no-save

(Ссылка)

person adiga    schedule 08.07.2019

При установке пакетов npm (как глобально, так и локально) вы можете определить конкретную версию, используя синтаксис @version для определения версии, которая будет установлена.

Другими словами, выполнение: npm install -g [email protected] гарантирует, что будет установлена ​​только версия 0.9.2, и не будет переустанавливаться, если она уже существует.

В качестве небольшого совета я бы посоветовал по возможности избегать глобальных установок npm. Многие люди не понимают, что если зависимость определяет файл bin, он устанавливается в ./node_modules/.bin/. Часто очень просто использовать ту локальную версию установленного модуля, которая определена в вашем package.json. Фактически, сценарии npm добавят ./node_modules/.bin на ваш путь.

В качестве примера приведу package.json, который при запуске npm install && npm test установит версию karma, определенную в моем package.json, и будет использовать эту версию karma (установленную в node_modules / .bin / karma) при запуске сценария test :

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

Это дает вам преимущество, заключающееся в том, что ваш package.json определяет версию karma для использования и избавляет от необходимости хранить эту конфигурацию глобально в вашем CI-боксе.

person addisonj    schedule 13.05.2013
comment
что в сценарии test? Подскажите, пожалуйста, как установить его с помощью скрипта. - person iLemming; 13.05.2013
comment
Посмотрите на package.json. В свойстве scripts вы можете определить другое свойство, test, значением которого является команда, которую вы хотите запустить при вводе npm test. Документы npm здесь довольно хороши: npmjs.org/doc/scripts.html - person addisonj; 14.05.2013

Чтобы действительно обновить только один пакет, установите NCU, а затем запустите его только для этого пакета. Это будет самое последнее.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
person regisbsb    schedule 28.12.2018
comment
Сообщение низкого качества, поможет какое-нибудь лучшее объяснение. - person linuxfan says Reinstate Monica; 28.12.2018

Другой подход - сначала обновить файл package.json, используя,

ncu -u

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

npm install

чтобы обновить все пакеты до последней версии. ps: он обновит все пакеты до последней версии, однако, если пакет уже обновлен, этот пакет вообще не будет затронут.

person soraku02    schedule 24.04.2021

Еще одно для bash:

npm outdated -parseable|cut -d: -f5|xargs -L1 npm i
person Ronen    schedule 06.07.2021

3 простых шага, которые вы можете использовать для обновления всех устаревших пакетов

Сначала проверьте пакеты, которые устарели

sudo npm i -g npm-check-updates

Во-вторых, положите их все наготове

ncu -u

Результаты в Терминале будут такими:

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

В-третьих, просто обновите их все.

npm install

Вот и все.

person Huu Phong Nguyen    schedule 13.07.2021