Настройте VSCode, чтобы всегда использовать правильную версию Node.

Как разработчик, вы можете работать над несколькими проектами в разных средах, часто переключаясь между корпоративной работой со старыми версиями Node.js и современными приложениями, требующими новейших функций в Node.

Управление такими Node.js версиями может быть обременительным, особенно если вам нужны три или более разных версий Node. Разве не было бы здорово, если бы каждый экземпляр терминала внутри VSCode автоматически открывался с желаемой версией Node? Не смотрите дальше! Этот пост в блоге покажет вам, как этого добиться.

Во-первых, иногда довольно сложно завершить документацию VSCode, связанную с профилями терминала, и я, конечно, много использовал ChatGPT, чтобы помочь мне. Но в основном решение состоит из трех шагов:

  • Создайте новый профиль терминала, который будет запускать предварительный скрипт каждый раз, когда вы открываете новый интегрированный терминал в vscode, и установите его в качестве профиля по умолчанию.
  • Создайте файл .nvmrc в своем проекте, который содержит нужную версию узла.
  • Создайте этот скрипт, который будет запускаться перед запуском терминала, установив для вас правильную версию узла на этом терминале.

Прежде чем погрузиться в решение, убедитесь, что в вашей системе установлен и настроен Node Version Manager (NVM).

Решение:

1. Настройте профили терминала по умолчанию

Откройте пользовательские настройки VSCode (в формате JSON) и добавьте следующие профили терминала, определенные ключами `terminal.integrated.profiles.osx` и `terminal.integrated.profiles.linux`:

{
  "terminal.integrated.profiles.osx": {
    "ZshWithNvm": {
      "id": "ZshWithNvm",
      "path": "zsh",
      "source": "zsh",
      "args": [
        "-c",
        "[ -f .nvmrc ] && { [ -f ./scripts/loadNvmAndNode.sh ] && ./scripts/loadNvmAndNode.sh || { [ -f /usr/local/bin/loadNvmAndNode.sh ] && loadNvmAndNode.sh || true; }; } || true; exec $SHELL"
      ],
      "extensionIdentifier": "osx",
      "icon": "terminal",
      "title": "Zsh with NVM"
    }
  },
  "terminal.integrated.profiles.linux": {
    "BashWithNvm": {
      "id": "BashWithNvm",
      "path": "bash",
      "source": "bash",
      "args": [
        "-c",
        "[ -f .nvmrc ] && { [ -f ./scripts/loadNvmAndNode.sh ] && ./scripts/loadNvmAndNode.sh || { [ -f /usr/local/bin/loadNvmAndNode.sh ] && loadNvmAndNode.sh || true; }; } || true; exec $SHELL"
      ],
      "extensionIdentifier": "linux",
      "icon": "terminal-bash",
      "title": "Bash with NVM"
    }
  },
  "terminal.integrated.defaultProfile.osx": "ZshWithNvm",
  "terminal.integrated.defaultProfile.linux": "BashWithNvm"
}

Эта конфигурация устанавливает профили по умолчанию для сред macOS (Zsh) и Linux (Bash), указывая при этом, что каждый новый терминал должен запускать сценарий `./scripts/loadNvmAndNode.sh`, если присутствует файл `.nvmrc`.

2. Создайте скрипт для загрузки соответствующей версии Node.js.

Создайте файл сценария с именем loadNvmAndNode.sh в папке scripts вашего проекта. Вставьте следующее содержимое скрипта:

#!/bin/sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
if [ -f .nvmrc ]; then
NODE_VERSION=$(cat .nvmrc)
nvm use "$NODE_VERSION" || nvm install "$NODE_VERSION"
else
nvm use default
fi
exec $SHELL

Этот сценарий устанавливает соответствующую версию Node.js на основе файла .nvmrc, если он существует, и возвращается к версии Node.js по умолчанию, если она отсутствует.

Теперь всякий раз, когда вы открываете новый терминал в рабочей области VSCode, он загружает версию Node.js, указанную в файле `.nvmrc`, избавляя вас от множества головных болей, связанных с ручным управлением версиями.

Это решение адаптировано для macOS и Linux, но его легко адаптировать для Windows. Я действительно не хотел тратить время на его написание, потому что, если вы все еще программируете в Windows, у вас есть проблемы посерьезнее, чем эта (шутка)!

Если в вашем проекте нет .nvmrc или файла внутри scripts с именем loadNvmAndNode.sh, это почти не повлияет, потому что скрипт проверяет его перед попыткой запуска.

Если вы хотите пойти дальше, добавьте loadNvmAndNode.sh внутрь usr/local/bin, и вам больше не нужно заботиться о создании папки scripts/ в ваших проектах. Не забудьте запустить chmod +x loadNvmAndNode.sh, чтобы разрешить выполнение файла!

Заключение:

В этом посте подробно описан простой и эффективный способ беспрепятственного управления версиями Node.js в проектах в рабочей области VSCode. Объединив мощь NVM с настраиваемыми профилями терминалов и облегченным сценарием, вы сможете получить более рациональный опыт разработки, который сэкономит время и усилия.

Если вы хотите отключить его, просто измените свой профиль по умолчанию в разделе `terminal.integrated.defaultProfile.‹OS›`, как показано в начале.

Пусть ваше управление Node.jsверсией будет без проблем, и у вас останется время для создания потрясающих проектов! Удачного кодирования!