nvm не совместим с параметром префикса конфигурации npm:

208

Я пытаюсь запустить другую версию NodeJS с, nvmно получаю эту ошибку:

$ nvm use v4.2.4

nvm is not compatible with the npm config "prefix" option: 
   currently set to "/Users/z/.npm-global"
Run `npm config delete prefix` or `nvm use --delete-prefix v4.2.4` to unset it.

У меня установлен префикс с целью избежать sudo npm(см. Https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Есть ли способ, которым я могу использовать, nvmне теряя свой префикс для глобально установленных пакетов?

Дмитрий Зайцев
источник
Я использую префикс npm config delete, чтобы обойти это, пока проблем нет
ggdx
@DanWhite Если я удаляю префикс, я теряю перенаправление моих глобальных установок в выделенный каталог.
Дмитрий Зайцев
5
(сопровождающий nvm здесь) В этом все дело. С nvm он, а не вы, управляет вашими глобальными установками. Отдельно глобальные установки никогда не должны делиться между версиями узла.
LJHarb
2
Каждая копия узла имеет свой собственный npm, который определяет свои собственные настройки.
LJHarb
1
Действительно, каждая выбранная версия узла с nvm является отдельной оболочкой - это разработано.
LJHarb

Ответы:

379

Удалить и сбросить префикс

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

Примечание. Измените номер версии на номер, указанный в сообщении об ошибке.

nvm несовместим с параметром «префикс» конфигурации npm: в настоящее время установлено «/ usr / local» «Выполнить» префикс удаления конфигурации npm »или« nvm использует --delete-prefix v6.11.1 --silent »для его отмены.


Кредиты @gabfiocchi на Github - «Вам нужно перезаписать префикс nvm»

Мик
источник
10
Это работает как шарм! Просто нужно было взять мою версию узла.
Sirius_B
У меня, кажется, была символическая ссылка / usr / local / bin / node, которая заставляла бы интегрированный терминал в vscode видеть версию узла, которую он не должен был видеть. Выполнение вышеуказанных шагов, а затем удаление символической ссылки, по-видимому, устранило проблему. Мой узел и npm теперь управляются nvm
Судханшу Мишра
это работает отлично. только не пропустите установить префикс версии узла, который вы собираетесь использовать. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Хирен
3
Это работает только в текущем окне. Если вы открываете новую оболочку или новое окно, вам придется делать это снова и снова.
Jtiscione
3
Я должен сделать это по порядку. 1. использование nvm --delete-prefix vx.xx --silent 2. префикс npm config delete 3. префикс npm config set $ NVM_DIR / versions / node / vx.xx
Guangtong Shen
66

У меня была такая же проблема, и выполнение npm config delete prefixне помогло мне.

Но это сделал:

После установки nvm с помощью brew создайте ~/.nvmкаталог:
$ mkdir ~/.nvm

и добавьте следующие строки в ~/.bash_profile:

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

(Убедитесь, что у вас нет других команд, связанных с nvm, ни в ~/.bashrcor, ~/.profileни в ~/.bash_profile)

Откройте новый терминал, и на этот раз он не должен печатать никаких предупреждающих сообщений.
Убедитесь, что nvm работает, выполнив nvm --versionкоманду.
После этого установите / переустановите NodeJS, используя nvm install node && nvm alias default node.

Больше информации

Я установил nvmс помощью homebrewи после этого я получил это уведомление:

Обратите внимание, что апстрим попросил нас сделать явное управление nvm через Homebrew им не поддерживаемым, и вы должны проверить все проблемы, связанные со стандартным методом установки nvm, прежде чем сообщать о них.

Вам следует создать рабочий каталог NVM, если он не существует:

 mkdir ~/.nvm

Добавьте следующее ~/.bash_profileили желаемый файл конфигурации оболочки:

 export NVM_DIR=~/.nvm
 . $(brew --prefix nvm)/nvm.sh

Вы можете установить $NVM_DIRлюбое местоположение, но оставив его без изменений, /usr/local/Cellar/nvm/0.31.0вы уничтожите все установленные Nov установки Node при обновлении / переустановке.

Игнорирование этого привело меня к этому сообщению об ошибке:

nvmнесовместим с npm configопцией «prefix»: в настоящее время установлено значение « "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Run» nvm use --delete-prefix v5.7.1 --silentдля его отмены.

Я следовал более раннему руководству (с homebrew/nvm) и после этого я обнаружил, что мне нужно переустановить NodeJS. Так я и сделал:

nvm install node && nvm alias default node

и это было исправлено.

Обновление: использование brew для установки NVM вызывает медленный запуск Терминала. Вы можете следовать этой инструкции, чтобы решить ее.

SMMousavi
источник
6
nvm alias default nodeказалось, помогло мне в моем случае
mirkobrankovic
28
(сопровождающий nvm здесь) nvmне поддерживается при установке через brew. Пожалуйста, удалите его и используйте правильный метод, скрипт curl в файле readme.
LJHarb
3
Я использовал скрипт curl для установки nvm. Этот ответ не работал для меня.
intcreator
1
@intcreator Спасибо. В итоге я сделал полную свежую установку узла с использованием nvm, основываясь на этом руководстве: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm И мое зависание закончилось тем, что я ранее установлен с помощью homebrew, который больше не поддерживается. Это оставило много остатков, которые потребовалось некоторое время, чтобы очистить, а затем мне пришлось rm -rf node_modulesи npm installснова запустить , так как каталоги уже имели проблемы с разрешениями.
Джейк Т.
1
Для ясности потомства мне пришлось сделать один brew remove node -f, который удаляет все установленные версии. Сделайте это сначала, затем следуйте руководству в моей ссылке выше, затем удалите node_modules. Вы должны получить чистую установку! Я думаю, что тогда вам также нужно установить npm, что я просто следовал инструкциям из статьи на nodejs.org, которая появилась, когда я ее искал. npm install npm@latest -gбыла команда, после установки узла.
Джейк Т.
31

Это может быть конфликтом с вашей локальной установкой Node (если в прошлом она была установлена ​​другим способом, чем NVM). Вы должны удалить этот экземпляр узла:

  1. удалить node_modules sudo rm -rf /usr/local/lib/node_modules
  2. удалить узел sudo rm /usr/local/bin/node
  3. удалить ссылку на узел cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

После того, как вы не можете установить NVM

целитель
источник
9
Хотели бы вы дополнить свой ответ только для кода некоторым объяснением? Комментариев недостаточно, потому что ваши командные строки более сложны, чем они объясняют. Уточните, почему детали вашего ответа решают проблему. Сравните ваш ответ с ответами старше. Что делает ваш ответ добавленной стоимостью к этому вопросу?
Yunnosch
Для меня пустая первая строка кода (которую вы недавно добавили) нуждается в собственном объяснении ...
Yunnosch
После пяти месяцев на StackOverflow подумайте о том, как пройти очень полезную экскурсию .
Yunnosch
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Также постарайтесь не переполнять ваш код пояснительными комментариями, это снижает удобочитаемость кода и пояснений!
Филнор
«После того, как вы не можете установить nvm» Итак, если моя цель - использовать nvm, я не должен этого делать?
Джейк Т.
18

Эта ошибка может возникать, когда путь к папке установки NVM имеет символическую ссылку .

объяснение

Путь установки NVM по умолчанию: $HOME/.nvmно ваша домашняя папка может быть символической ссылкой для другого диска, как мой случай.

Например, моя домашняя папка является символической ссылкой на другой диск:

/home/myuser -> /bigdrive/myuser

Это вызывает проблему префикса.

Решение

В вашем скрипте запуска (.bashrc или .zshrc или другой) измените папку NVM на прямой путь.

Пример: NVM_DIR="/bigdrive/myuser/.nvm".

.bashrc

export NVM_DIR="/bigdrive/myuser/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
Андре Авелар
источник
Спасибо! Ваш ответ должен быть более заметным
Бен
Нет. Я сжег свой мозг, чтобы понять эту сумасшедшую ошибку. Я не нашел постов, которые мне помогли. Я должен был бороться изо всех сил , чтобы решить эту проблему. Я рад помочь вам. Проголосуйте за мой ответ, чтобы быть более заметным.
Андре Авелар
мой echod $ NVM_DIR был "/Users/vijayshanker/.nvm", если я положил "export NVM_DIR =" / Users / vijayshanker / .nvm (и остальные) "в bashrc, попытался, но он все еще не исправил его, боролся за 6 часов, пожалуйста, обратите внимание: у меня не установлен npm, я не установил свой узел из npm
Виджай Шенкер
одним из решений может быть экспорт NVM_DIR = $ (readlink -f "$ HOME / .nvm") в .bashrc или командную строку. Это удалит все символические ссылки из $ HOME / .nvm и экспортирует простой полный путь только с реальными каталогами.
Нимлар
10

Я столкнулся с этим при использовании узла, установленного через nvm, с nvmустановленным через homebrew. Я решил это, запустив brew uninstall nvm, rm -rf $NVM_DIRзатем переустановив nvm, используя официальный скрипт установки, и переустановив нужную мне версию узла.

Примечание: я также $NVM_DIRсмонтировал и вставил символическую ссылку. Я вернул его обратно в мой домашний каталог.

Лейн Реттиг
источник
9

Это может быть проблемой, если ваш домашний каталог где-то смонтирован, потому что nvm не работает с символическими ссылками. Поскольку мне все равно, где находится мой $ NVM_DIR, я запускаю это, и все работает нормально:

$ mv ~/.nvm /tmp/
$ export NVM_DIR="/tmp/.nvm"
$ nvm use --delete-prefix v6.9.1
Джеймс Мэй
источник
6

введите описание изображения здесьУ меня была та же самая проблема, и это действительно раздражало каждый раз с терминалом. Я запускаю команду в терминал, и это было исправлено

Для тех, кто пытается удалить nvm из варева

может не хватить просто заварить удаление nvm

если вы видите, что префикс npm по-прежнему / usr / local, выполните эту команду

sudo rm -rf /usr/local/ enjlib/nodendom,/.npm,_modules coming,bin,share/man‹/ndomnpm*,node*,man1/node*}

Панайотис Георгиу
источник
4

У меня такое же сообщение об ошибке, но другое решение. Автоматически сгенерированный путь во время curl (install.sh) не совпадает. Проверьте это с:

echo $NVM_DIR

В моем случае: /var/www//.nvm. Показать в вашем автоматически сгенерированном файле bash и изменить его и заменить его: (~ / .bash_profile, ~ / .zshrc, ~ / .profile или ~ / .bashrc)

замещать

export NVM_DIR="$HOME/.nvm"

с (например)

export NVM_DIR="$HOME.nvm"
Матиас Шобнер
источник
Пришел сюда, чтобы поставить тот же комментарий :) В моем случае, потому что, когда я создал пользователя, я установил дом как useradd --home / home / user / с конечным / я удалил из файла / etc / passwd, и все начало работать снова
Израиль
1

Я следовал за https://stackoverflow.com/a/47861348/2391795 ответом, но это не сработало.

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

После выполнения рекомендованных команд, мой nvm больше не работал, при запуске nvm useбудет отображаться правильная используемая версия узла, но при запуске node -vбудет показана другая. Больше невозможно было изменить версию узла.

Я удалил и переустановил NVM полностью, чтобы исправить это. Я следовал за https://github.com/creationix/nvm#manual-uninstall , запустив

$ rm -rf "$NVM_DIR"

Затем отредактировал мой, .zshrcчтобы удалить строки, связанные с NVM, которые в моем случае были

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Затем запустил новую оболочку (чтобы nvm не загружался в эту новую оболочку) и запустил https://github.com/creationix/nvm#install-script

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

Который добавил nvm строки, которые я ранее удалил в моем .zshrc.

Тогда я смог использовать nvm, как раньше. Я думаю, это странный случай, когда что-то пошло не так и заставило меня переустановить все, не похоже, что большинство людей проходят через это из-за этой проблемы.

Vadorequest
источник
1

Позвольте мне описать мою ситуацию.

Сначала проверьте текущий конфиг

$ nvm use --delete-prefix v10.7.0
$ npm config list

Затем я нашел ошибку конфигурации в выводе:

; project config /mnt/c/Users/paul/.npmrc
prefix = "/mnt/c/Users/paul/C:\\Program Files\\nodejs"

Итак, я удалил C:\\Program Files\\nodejsв /mnt/c/Users/paul/.npmrc.

Пол Хан
источник
1

Я решил эту проблему, когда она отображалась на терминалах VSCode и JetBrains, но не на собственном терминале, используя следующие команды:

ls -la /usr/local/bin | grep "np[mx]"

Это даст вам решенный путь в конце:

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

Оттуда удаление файлов и перезапуск VS Code должны решить проблему:

rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm -R /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

исправить ссылку: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Мехди Нассим Ходжа
источник
0

Я искал решение для проблемы префикса nvm и нашел этот вопрос (прежде чем найти решение). Вот моя оболочка "Диалог". Надеюсь, кому-то это может пригодиться. Мне удалось установить префикс с помощью этого поста: https://github.com/npm/npm/issues/6592

Когда я пытался npm config delete prefixили nvm use --delete-prefixперед использованием npm --prefix="" set prefix "", я получил только: npm ERR! не в порядке код 0

Обратите внимание, что вам придется повторять одну и ту же процедуру для каждой версии узла, после установки префикс возвращается (в моем случае) / usr / local.

    $ nvm install 0.10
    ######################################################################## 100.0%
    nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ npm --prefix="" set prefix ""
    $ nvm use 0.10.44
    nvm is not compatible with the npm config "prefix" option: currently set to "/home/john"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ nvm use --delete-prefix v0.10.44
    Now using node v0.10.44 (npm v1.3.10)
    $ nvm ls
    v0.10.44
             v4.4.3
    ->       system
    default -> 4.4.3 (-> v4.4.3)
    node -> stable (-> v4.4.3) (default)
    stable -> 4.4 (-> v4.4.3) (default)
    iojs -> N/A (default)
    $ npm config get prefix
    /usr/local
vSurfer
источник
0

У меня была эта проблема после перемещения моей домашней папки на новый диск в Linux. Это было исправлено путем удаления папки .nvm и переустановки nvm

Пабло Мешер
источник
0

Просто решил проблему. Я ссылался $HOME/.nvmна $DEV_ZONE/env/node/nvmкаталог. Я столкнулся с той же проблемой. Я заменил NVM_DIRв $HOME/.zshrcследующем

export NVM_DIR="$DEV_ZONE/env/node/nvm"

Кстати, пожалуйста, установите NVM, используя команду curlили wgetне используя brew. Для получения дополнительной информации, пожалуйста, проверьте комментарий в этом выпуске на Github: 855 # issuecomment-146115434

Нур Рони
источник
Как насчет установки nvmс npm?
Дмитрий Зайцев
1
Установка nvm через homebrew официально устарела и приводит к проблемам из-за некоторых несовместимостей. Официальный способ - использовать curl / wget, см. Github.com/creationix/nvm#install-script, см. Github.com/creationix/nvm/issues/298#issuecomment-152255091. Установка через npm не поддерживается AFAIK, поскольку nvm устанавливает npm, так что если npm также устанавливает nvm, это может привести к крайним случаям. Вы можете прочитать об этом по вопросу, который я ранее связывал.
Vadorequest
0

У меня просто есть идея. Используйте символьную ссылку для устранения ошибки, и вы все равно можете использовать свой префикс для глобально установленных пакетов. ln -s [your prefix path] [path in the '~/.nvm'] тогда у вас будет символическая папка в ~/.nvmпапке, но на самом деле ваши глобальные пакеты все еще установлены в [ваш путь префикса]. Тогда ошибка не будет отображаться снова, и вы можете использовать в nvm use **обычном режиме. PS: это работает для меня mac. pps: не забудьте установить $PATHв свою binпапку npm использование глобально установленных пакетов.

XQi
источник
-2

Примечание:
чтобы удалить, удалить или удалить nvm - просто удалите $NVM_DIRпапку (обычно ~/.nvm), которую
вы можете попробовать:
rm -rf ~/.nvm

kaiqiu
источник