Некоторые проекты зачастую требуют специфичные версии локально установленных программ. Это может быть как определенная версия node.js или npm (например, npm@7 с поддержкой workspaces), так и определенная база данных, менеджер пакетов и другие утилиты, которые нельзя установить из npm. Зачастую команды фиксирую версии в чатиках, readme или вики.
npm позволяет задекларировать в package.json файле необходимые версии node и npm, но никак не проверяет их. Чтобы исправить это и расширить список инструментов был написан небольшой npm пакет engine-version. Пакет работает очень просто: сначала он считывает описание необходимого софта из package.json, а затем смотрит установлена ли программа и совпадает ли установленная версия описанной. И если проверки прошли неудачно, отображается список ошибок.

Чтобы начать пользоваться пакетом нужно сначала установить пакет из npm:
npm install --save-dev engine-versionОписать список необходиммых инструментов в package.json (формат описания):
{
  ...
  "engines": {
    "node": ">=16.0.0",
    "npm": "~7.0.0",
    "mysql": "*"
  },
  ...
}Добавить скрипт запускающий проверку в package.json, например, перед процессом сборки пакета:
{
  ...
  "scripts": {
    "prebuild": "engine-version",
    "build": "my_build_script"
  },
  ...
}
  Дальше планируется сделать:
- Сделать ошибки более информативными 
- Возможность конфигурирования при помощи аргументов (предупреждения вместо ошибок) 
- Добавить альтернативные виды проверки версий для популярных программ, не понимающих аргумент --version (сейчас проверка установленной версии выполняется вызовом программы с опцией --version в дочернем процессе) 
 
           
 
mark_ablov
npm проверят версию окружения. Но выбрасывает
errorесли установлена опцияengine-strict. На уровне проекта эту опцию можно установить через.npmrcрядом сpackage.json.Была небольшая проблема, то что если есть lockfile, то проверка не проводилась, но в npm@7 уже пофиксили — https://github.com/npm/arborist/pull/143