Чтобы узнать, какую версию Node.js ожидает проект на вашем Mac, изучите его файлы версий и конфигурацию, прежде чем проверять активную версию в Terminal. Начните с .nvmrc, затем проверьте package.json на наличие настроек volta и engines. Эти подсказки имеют разные значения: одни жестко фиксируют версию для конкретного инструмента, другие описывают диапазон совместимости.
1. Откройте папку проекта в Terminal
В Finder найдите папку проекта. Удерживая клавишу Control, нажмите на нее и выберите Новый терминал по адресу папки, если эта опция доступна; в противном случае откройте Terminal и перейдите в папку с помощью команды cd. Вы можете перетащить папку из Finder в окно Terminal после ввода cd и затем нажать Return. Это поможет избежать ошибок при вводе пути, содержащего пробелы.
Выполните эти команды только для чтения из каталога проекта:
ls -a
grep -nE '"(engines|volta)"|"node"' package.json .nvmrc
Команда ls -a отображает скрытые файлы, такие как .nvmrc. grep выводит совпадающие строки из существующих файлов; если один из файлов отсутствует, может появиться сообщение об ошибке для этого файла, что не означает поломку проекта. Чтобы изучить конкретный файл более подробно, используйте sed -n '1,160p' package.json или sed -n '1,20p' .nvmrc, если файл существует. Эти команды отображают текст; они не вносят изменений в проект.
2. Прочитайте .nvmrc как инструкцию для менеджера версий
Если вы найдете файл .nvmrc, прочитайте его содержимое. Значение вроде 20.16.0 указывает на то, что проект определяет эту версию Node.js для пользователей nvm. nvm также поддерживает такие селекторы версий, как 20 или lts/*, поэтому файл может указывать не на конкретный патч-релиз. В документации nvm указано, что его команды могут находить .nvmrc в каталоге проекта или в родительском каталоге, а команда nvm use без указания версии использует этот файл, если он доступен. nvm README: .nvmrc
В macOS проверьте, доступен ли nvm и какую версию он определяет в этом каталоге:
command -v nvm
nvm use
node --version
Команда command -v nvm должна вывести nvm, если nvm загружен в текущей оболочке. Если команда недоступна, не стоит считать .nvmrc недействительным; этот файл все равно документирует выбор проекта, даже если у вас не установлен или не загружен nvm. nvm use выбирает версию, указанную в файле, если она установлена; если она отсутствует, nvm может предложить установить ее. Запускайте установку только в том случае, если вы действительно намерены добавить эту версию Node на свой Mac.
3. Проверьте package.json на наличие Volta и диапазонов совместимости
Поищите объект верхнего уровня volta. Например:
"volta": {
"node": "20.16.0"
}
Это фиксация версии Node для проектов под управлением Volta. Документация Volta указывает, что volta pin сохраняет выбранные версии инструментов в package.json, и что Volta направляет команды Node на версию проекта. Understanding Volta Если вы используете Volta, выполнение команды node --version из каталога проекта покажет, какую версию запускает инструментарий; без Volta этот объект остается лишь метаданными проекта, а не командой для macOS Terminal.
Также проверьте свойство engines, которое обычно записывается следующим образом:
"engines": {
"node": ">=18 <23"
}
Оно задает диапазон совместимости, а не обязательно ту версию, которая установлена у разработчиков. Документация npm описывает engines.node как указание версий Node, с которыми работает пакет; если параметр engine-strict не включен, npm рассматривает его как рекомендательный и может лишь выдавать предупреждения при установке зависимостей. Документация npm по package.json Широкий диапазон означает, что проект заявляет о совместимости со всеми разрешенными версиями; он не задает одну конкретную ожидаемую версию.
4. Сравните файлы и устраните противоречия
Считайте точное совпадение в .nvmrc или фиксацию в Volta самым надежным признаком версии, управляемой соответствующим инструментом. Считайте engines.node ограничением совместимости. Если файлы противоречат друг другу — например, в .nvmrc указано 18, а engines.node требует >=20 — не выбирайте один вариант наугад. Файлы могут быть устаревшими, предназначаться для разных инструментов или отражать недавние изменения. Проверьте README и инструкции по установке проекта, а затем уточните у мейнтейнеров или команды, какому файлу должны следовать контрибьюторы.
Проекты также могут определять версии в файлах, используемых другими менеджерами версий, или в конфигурациях CI. Если в .nvmrc и package.json нет полезной информации, просмотрите видимые файлы проекта с помощью ls -a, а также изучите документацию по настройке и конфигурацию рабочих процессов (workflow). Файл CI может указывать версию, используемую для автоматических сборок, но она может отличаться от локального окружения разработчика; уточните контекст, прежде чем считать ее обязательным требованием проекта.
5. Проверьте версию Node, которую фактически использует ваш Mac
Определив требование проекта, сравните его с активной средой выполнения:
node --version
command -v node
Первая команда сообщает активную версию Node; вторая показывает путь к исполняемому файлу, выбранному через PATH вашей оболочки. Они описывают текущее окружение Terminal, а не требования самого проекта. При использовании nvm выполните nvm use из каталога проекта перед проверкой. При использовании Volta запускайте проверки из этого каталога, чтобы применились его настройки. Если отображаемая версия все еще отличается от зафиксированной, возможно, соответствующий менеджер не установлен, не загружен или не управляет исполняемым файлом node в данной оболочке.
Практический ответ строится на сопоставлении обеих сторон: декларация версии в репозитории сообщает, что именно требуется, а node --version показывает, что запущено на вашем Mac в данный момент. Если они не совпадают, разберитесь с менеджером или инструкциями проекта, прежде чем полагаться на локальные результаты.
Источники
nvm/README.md — nvm-sh
Understanding Volta — Volta
package.json | npm Docs — npm