9

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

4

Описание проблемы:

Мне нужно интегрировать тестовый.runner 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?

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

5 ответ(ов)

1

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

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

И это всё. Все версии пакетов в вашем package.json будут обновлены до последних мажорных версий.

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

  1. Устанавливается пакет, который проверяет обновления для вас.
  2. Используется этот пакет для обновления всех версий пакетов в вашем package.json (флаг -u — это сокращение для --updateAll).
  3. Устанавливаются все новые версии пакетов.
0

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

  1. Сначала узнайте, какие пакеты требуют обновления, выполнив команду:

    npm outdated
    
  2. Затем обновите нужный пакет вручную с помощью команды:

    npm update --save <имя_пакета>
    

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

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

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

npm update <имя_пакета>

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

Кроме того, с помощью команды npm list <имя_пакета> вы можете узнать текущую версию вашего локального пакета.

0

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

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

Эта команда сначала получает список устаревших пакетов, извлекает их имена, пропускает заголовок и формирует команду для их обновления до последней версии. Просто выполните её в терминале вашего проекта, и устаревшие пакеты будут обновлены без установки дополнительных пакетов.

0

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

  • Чтобы проверить устаревшие или уязвимые зависимости в ваших node модулях, используйте следующую команду:
npm audit
  • Если будут обнаружены уязвимости, выполните следующую команду для исправления всех проблем:
npm audit fix
  • Если это не сработало, попробуйте:
npm audit fix -f

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

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

При установке 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-платформе.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь