npm WindowsLinuxmacOSNode.jsnpm

npm: Неправильная версия пакета устанавливается из-за диапазона semver

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

В package.json версии допускают диапазоны ^ и ~, а npm выбирает конкретную версию по lock-файлу или, при его отсутствии, из доступных подходящих выпусков. Если ожидали одну версию, а получили другую, сначала проверьте, что говорит локальный package-lock.json.

В этой статье
  1. Как проявляется ошибка и когда применим способ
  2. Причины и признаки
  3. Пошаговая диагностика и решение
  4. Проверка результата и действия при повторении

#Как проявляется ошибка и когда применим способ

В package.json версии допускают диапазоны ^ и ~, а npm выбирает конкретную версию по lock-файлу или, при его отсутствии, из доступных подходящих выпусков. Если ожидали одну версию, а получили другую, сначала проверьте, что говорит локальный package-lock.json.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Широкий диапазонЗнак ^ обычно разрешает совместимые изменения внутри диапазона SemVer, а ~ — более узкие исправления.Пакет имеет более новую фактическую версию, чем записанный минимум.Уточнить желаемый диапазон и обновить lock.
Старый lockДаже после изменения package.json согласованный lock может удерживать старую допустимую версию.npm ls и package-lock.json показывают одну и ту же зафиксированную версию.Изменять lock контролируемым обновлением.

#Пошаговая диагностика и решение

  1. 1. Определите точный установленный пакетОткройте терминал в корне проекта и подставьте в команду настоящее имя пакета вместо ИМЯ_ПАКЕТА. Сравните версию зависимости на верхнем уровне дерева и версию, которая ожидалась; при вложенной зависимости смотрите дерево целиком.
  2. Замените ИМЯ_ПАКЕТА
    Linux · Терминал (Bash)Команда
    Замените ИМЯ_ПАКЕТА. Команда только показывает дерево установленных версий.
    npm ls ИМЯ_ПАКЕТА
  1. 2. Посмотрите правило в package.jsonВ редакторе откройте package.json и найдите имя пакета в dependencies или devDependencies. Различайте запись 1.2.3, ^1.2.3, ~1.2.3 и диапазон >=; звездочка позволяет особенно широкий выбор. Запишите желаемую и допустимую версии до любых правок.
  1. 3. Сравните версию в lock-файлеОткройте package-lock.json в редакторе и найдите packages["node_modules/ИМЯ_ПАКЕТА"], если это простой пакет верхнего уровня. Для вложенной зависимости путь может быть другим. Запишите поле version; не меняйте его текстовым редактором, иначе нарушится согласованность контрольных сумм.
  1. 4. Проверьте доступные выпуски и требованияИз папки проекта выполните npm view с реальным именем пакета. Сопоставьте список релизов и требование engines (если опубликовано). При работе с приватным реестром версии могут отличаться от публичного npm; не подменяйте источник пакета без разрешения.
  2. Только чтение метаданных настроенного реестра; замените имя пакета
    Linux · Терминал (Bash)Команда
    Только чтение метаданных настроенного реестра; замените имя пакета.
    npm view ИМЯ_ПАКЕТА versions --json
    npm view ИМЯ_ПАКЕТА engines --json
  1. 5. Поменяйте правило версии в копииСделайте Git-ветку и уточните значение нужного пакета в package.json. Если нужен строго определённый выпуск, используйте точную проверенную версию, без ^ и ~; затем выполните npm install в копии. Просмотрите изменения package-lock.json. Не фиксируйте наугад версии у всех пакетов.
  1. 6. Проведите воспроизводимую установкуВ тестовой копии выполните npm ci и затем npm ls для нужного пакета. Убедитесь, что итоговая версия соответствует ожидаемой, выполните тесты проекта. Если она не подходит зависимостям второго уровня, рассмотрите вывод npm explain, не применяйте --force.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностью
    npm ci заменяет node_modules текущей копии; npm explain показывает причину включения пакета.
    npm ci
    npm explain ИМЯ_ПАКЕТА

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Проверка результата и действия при повторении

После согласования диапазона, lock-файла и фактической установки npm ls должен показывать целевой выпуск. При повторном npm ci версия не должна меняться. При ошибке загрузки смотрите реестр и версию Node.js отдельно.

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

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.