Управление версиями Node.js
fnm предоставляет мощные функции управления версиями, позволяя вам легко переключаться между несколькими версиями Node.js.
Базовые операции
Просмотр установленных версий
fnm listПример вывода:
* v20.10.0 default
v18.19.0
v16.20.2*указывает на текущую используемую версиюdefaultуказывает на версию по умолчанию
Просмотр текущей версии
fnm currentПереключение версии
# Переключиться на конкретную версию
fnm use 20
# Переключиться на конкретную точную версию
fnm use 20.10.0
# Если версия не установлена, автоматически установить и переключиться
fnm use 18 --install-if-missingВерсия по умолчанию
Установка версии по умолчанию
fnm default 20Версия по умолчанию:
- Это версия, используемая при запуске новой сессии терминала
- Это версия, используемая при отсутствии файла версии
Просмотр версии по умолчанию
fnm defaultПсевдонимы версий
Псевдонимы позволяют вам установить легко запоминающиеся имена для версий.
Создание псевдонима
# Установить псевдоним для версии
fnm alias 20 default
fnm alias 18 legacy
fnm alias 16 oldИспользование псевдонима
# Переключить версию через псевдоним
fnm use default
fnm use legacyУдаление псевдонима
fnm unalias legacyАвтоматическое переключение версий
fnm может автоматически переключать версии Node.js на основе директории проекта.
Включение автоматического переключения
Добавьте --use-on-cd в конфигурацию Shell:
eval "$(fnm env --use-on-cd)"Создание файла версии
Создайте файл .node-version или .nvmrc в корневой директории проекта:
# Использование .node-version (рекомендуется)
echo "20" > .node-version
# Или использование .nvmrc (совместимо с nvm)
echo "v18.17.0" > .nvmrcФормат файла версии
.node-version поддерживает следующие форматы:
20 # Основная версия, использовать последнюю 20.x.x
20.10 # Минорная версия, использовать последнюю 20.10.x
20.10.0 # Точная версия
lts/iron # Имя LTS версииСтратегия парсинга файлов версий
fnm поддерживает две стратегии парсинга файлов версий:
# local (по умолчанию) - Искать только в текущей директории
fnm env --version-file-strategy=local
# recursive - Рекурсивно искать в родительских директориях
fnm env --version-file-strategy=recursiveПоддержка package.json engines
fnm может читать поле engines.node из package.json:
{
"engines": {
"node": ">=18.0.0"
}
}Включено по умолчанию, можно отключить через переменную окружения:
export FNM_RESOLVE_ENGINES=falseЛучшие практики управления версиями
1. Блокировка версий на уровне проекта
Создайте файл .node-version в каждом проекте:
cd my-project
echo "20" > .node-version
fnm install
fnm use2. Совместная работа в команде
Добавьте .node-version в Git:
git add .node-version
git commit -m "chore: add .node-version"3. Конфигурация CI/CD
Используйте fnm в средах CI/CD:
# GitHub Actions
- name: Install fnm
run: curl -fsSL https://fnm.vercel.app/install | bash
- name: Install Node.js
run: fnm install && fnm use4. Разработка с несколькими версиями
# Установить несколько версий
fnm install 20
fnm install 18
fnm install 16
# Установить псевдонимы для удобного переключения
fnm alias 20 current
fnm alias 18 legacy
fnm alias 16 old
# Использовать разные версии в разных проектах
cd project-new && fnm use current
cd project-old && fnm use legacyУдаление версий
# Удалить конкретную версию
fnm uninstall 16.20.2
# Удалить через псевдоним (удалит версию и все связанные псевдонимы)
fnm uninstall oldОбщие проблемы
Команда node не обновляется после переключения версии
Убедитесь, что конфигурация Shell правильная:
# Проверить путь к node
which node
# Должен указывать на директорию fnm
# ~/.fnm/node-versions/.../bin/nodeАвтоматическое переключение не работает
- Подтвердите, что
--use-on-cdдобавлен в конфигурацию Shell - Подтвердите, что файл версии существует
- Перезагрузите конфигурацию Shell
Приоритет файла версии
fnm ищет версии в следующем порядке:
- Версия, указанная в командной строке
- Файл
.node-version - Файл
.nvmrc package.jsonполеengines.node- Версия по умолчанию
Связанные ссылки
- Установка Node.js - Руководство по установке
- Справочник команд - Все подробности о командах
- Управление загрузкой - Функции, связанные с загрузкой