Avatar ·

Как полностью удалить Node.js и переустановить заново на Mac OS X

Привет, коллеги! Я новичок в JavaScript и Node.js. Начал изучать разработку на MacBook, но, похоже, напортачил с установкой Node.js.

Сначала я установил Node.js через официальный инсталлятор с сайта. Потом, когда нужно было обновить версию, я просто скачал новый инсталлятор и запустил его поверх старой установки. Теперь у меня полная каша: команда node -v показывает одну версию, npm -v — другую, а глобальные пакеты, которые я устанавливал, то работают, то нет.

Пытался удалить Node.js вручную, удалял папки из /usr/local/lib/node_modules, но, кажется, только сделал хуже. Теперь npm вообще перестал работать с ошибками вроде Error: Cannot find module.

Я хочу полностью очистить систему от всех следов Node.js и npm, включая:

  • Бинарники node и npm
  • Глобальные пакеты
  • Кэш npm
  • Все конфигурационные файлы

После этого я хочу установить Node.js с нуля, но уже правильно, чтобы в будущем не было таких проблем. Как это сделать правильно на macOS?

// Пример проблемы:
$ node -v
v14.17.0
$ npm -v
6.14.13
// После попытки удаления:
$ npm install -g create-react-app
Error: Cannot find module 'semver'

Буду благодарен за подробную инструкцию!

<<>>

Полное удаление Node.js и npm на macOS

Проблема, с которой вы столкнулись, очень распространена среди начинающих разработчиков. "Грязная" установка поверх старой версии приводит к конфликтам модулей и бинарников. Вот проверенный способ полного удаления с последующей чистой установкой.

Шаг 1: Удаление всех бинарников и модулей

Запустите в терминале следующие команды. Они удалят все файлы Node.js, npm и глобальные пакеты:

# Удаляем бинарники
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/bin/npx

# Удаляем глобальные модули и библиотеки
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf /usr/local/lib/node

# Удаляем конфигурационные файлы пользователя
rm -rf ~/.npm
rm -rf ~/.node-gyp
rm -rf ~/.node_repl_history

# Удаляем кэш и временные файлы
sudo rm -rf /usr/local/share/man/man1/node*
sudo rm -rf /usr/local/share/man/man1/npm*
sudo rm -rf /usr/local/share/systemtap/tapset/node.stp
sudo rm -rf /opt/local/bin/node
sudo rm -rf /opt/local/bin/npm
sudo rm -rf /opt/local/lib/node_modules

Важно: Команды с sudo требуют пароль администратора. Будьте внимательны, чтобы не удалить лишнего.

Шаг 2: Проверка, что всё удалено

После выполнения команд проверьте, что Node.js и npm больше не доступны:

which node
# Должно вернуть: node not found
which npm
# Должно вернуть: npm not found

node -v
# Должно вернуть: -bash: node: command not found

Шаг 3: Установка Node.js через nvm (рекомендуемый способ)

Вместо установки через официальный инсталлятор, я рекомендую использовать nvm (Node Version Manager). Это позволит легко переключаться между версиями и избежать проблем в будущем:

# Устанавливаем nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Перезапускаем терминал или выполняем:
source ~/.zshrc  # или source ~/.bash_profile

# Устанавливаем последнюю стабильную версию Node.js
nvm install --lts

# Проверяем установку
node -v
npm -v

Шаг 4: Настройка глобальных пакетов

Теперь вы можете устанавливать глобальные пакеты, и они будут работать корректно:

npm install -g create-react-app
npm install -g nodemon
npm install -g typescript

Почему это работает?

Проблема была в том, что при установке поверх старой версии, бинарники и модули конфликтовали. nvm хранит каждую версию Node.js в отдельной папке ~/.nvm и просто подменяет пути в переменной окружения PATH. Это гарантирует чистоту установки и возможность легко откатиться на другую версию.

После выполнения всех шагов, ваша система будет чиста от старых файлов Node.js, и вы сможете работать без ошибок. В будущем для обновления Node.js достаточно выполнить nvm install --lts, а для смены версии — nvm use 18.

<<>>

Альтернативный способ: использование Homebrew

Если вы предпочитаете использовать пакетный менеджер Homebrew, вот альтернативный подход, который также эффективен:

# Сначала удаляем Node.js, установленный через Homebrew
brew uninstall --ignore-dependencies node
brew uninstall --force node

# Очищаем кэш и временные файлы
brew cleanup

# Удаляем остатки вручную
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf /usr/local/include/node
sudo rm -rf /usr/local/lib/node
rm -rf ~/.npm

После этого устанавливаем Node.js заново через Homebrew:

# Обновляем Homebrew
brew update

# Устанавливаем Node.js
brew install node

# Проверяем
node -v
npm -v

Плюсы этого метода:

  • Homebrew сам управляет зависимостями
  • Легко обновлять через brew upgrade node
  • Не требует дополнительных менеджеров версий

Минусы:

  • Сложнее переключаться между версиями
  • Может быть конфликт с системными библиотеками macOS

Оба метода (nvm и Homebrew) решают вашу проблему. Я рекомендую nvm для разработчиков, которые часто работают с разными проектами, требующими разных версий Node.js. Если же вам нужна одна стабильная версия, Homebrew — отличный выбор.