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

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

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

  • проверить, установлена ​​ли определенная версия бегуна кармы в npm global repo

  • если это не так, или установленная версия старше желаемого: выберите и установите правильную версию

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

Итак, мой реальный вопрос: "Как можно проверить в script, если желаемая версия пакета установлена?". Если вы делаете чек или можете просто позвонить npm -g install каждый раз?

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

Существует также "свежий" модуль, называемый npm-check:

NPM-проверка

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

enter image description here

Он также обеспечивает удобный интерактивный способ обновления зависимостей.

Ответ 4

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

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

      npm outdated

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

      npm update --save package_name

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

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

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

    npm update package_name

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

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

Ответ 5

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

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

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

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

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

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

  2. Используйте этот пакет, чтобы обновить все версии пакета в вашем package.json (-a сокращенно - -u pdateAll).

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

Ответ 7

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

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

    npm audit

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

    npm audit fix

  • Если это не работает для вас, попробуйте

    npm audit fix -f, эта команда почти исправит все уязвимости. Некоторые зависимости или devDependencies заблокированы в файле package-lock.json, поэтому мы используем флаг -f для принудительного их обновления.

  • Если вы не хотите использовать принудительное исправление аудита, вы можете вручную исправить версии зависимостей, изменив их в файлах package-lock.json и package.json. Затем запустите 'npm update && npm upgrade'

Ответ 8

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

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

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

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

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

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

Ответ 9

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

npm install $(npm outdated | cut -d' ' -f 1 | xargs -I '$' echo '[email protected]' | xargs echo)

Ответ 10

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

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

Ответ 11

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

npm update <package name>

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

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

npm update --no-save

( Ссылка)

Ответ 12

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