nvm не сумісний із параметром "prefix" npm config:


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 , щоб
уникнути

@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 config "prefix": наразі встановлено "/ usr / local" Run "npm config delete prefix" або "nvm use --delete-prefix v6.11.1 --silent" для його скидання.


Подяки @gabfiocchi на Github - "Вам потрібно перезаписати префікс nvm"


10
Це спрацювало як шарм! Просто довелося схопити мою версію вузла.
Sirius_B

У мене, здавалося, є символічне посилання / usr / local / bin / вузол, який би викликав інтегрований термінал у vscode, щоб побачити версію вузла, якого він не повинен бачити. Виконуючи вищезазначені дії, а потім видалити символічне посилання, виникла проблема. Моїм вузлом і нмм зараз керує nvm
Sudhanshu Mishra

це працює ідеально. просто не пропустіть встановити префікс версії вузла, яку ви збираєтеся використовувати. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Хірен

3
Це працює лише у поточному вікні. Якщо ви відкриєте нову оболонку чи нове вікно, вам доведеться це робити заново.
jtiscione

3
Я повинен це зробити для того, щоб. 1. nvm use --delete-prefix vx.xx --silent 2. npm config delete prefix 3. npm config set prefix $ NVM_DIR / version / 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, в будь-якому ~/.bashrcабо ~/.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, зруйнуйте будь-які встановлені nvm установки вузла після оновлення / перевстановлення.

Ігнорування привело мене до цього повідомлення про помилку:

nvmне сумісний з npm configопцією "префікс": наразі встановлено на " "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Виконати", nvm use --delete-prefix v5.7.1 --silentщоб зняти його.

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

nvm install node && nvm alias default node

і це було виправлено.

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


6
nvm alias default nodeздавалося, допомогло мені в моєму випадку
mirkobrankovic

28
(тут підтримується nvm-супровідник) nvmне підтримується, коли встановлюється за допомогою варіння. Видаліть його та скористайтеся належним методом, сценарієм curl у readme.
LJHarb

3
Я використовував сценарій curl для встановлення nvm. Ця відповідь не спрацювала для мене.
intcreator

1
@intcreator Дякую Я в кінцевому підсумку роблю повної свіжу установку вузла з використанням NVM на основі цього керівництва: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm І моє зависання закінчилося тим , що я мав раніше встановлений за допомогою домашньої мови, яка більше не підтримується. Залишилося чимало залишків, які потребували певного часу, щоб очистити, а потім мені довелося 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"

Дякую! Ваша відповідь повинна мати більше видимості
ben

Ні. Я обсмажив мозок, щоб зрозуміти цю шалену помилку. Я не знайшов жодної публікації, яка б мені допомогла. Мені довелося важко боротися, щоб вирішити проблему. Я радий вам допомогти. Голосуйте за мою відповідь, щоб видніше було.
Андре Авелар

мій echod $ NVM_DIR був "/Users/vijayshanker/.nvm", якщо я повинен поставити "export NVM_DIR =" / Користувачі / vijayshanker / .nvm (та решта) "у bashrc, спробував, але він все ще не виправив це, бореться за 6 годин, будь ласка, зверніть увагу: у мене не встановлено npm, я не встановив свій вузол з npm
vijay

одне рішення, можливо, експортувати NVM_DIR = $ (readlink -f "$ HOME / .nvm") у .bashrc або командний рядок. Це видалить все символьне посилання з $ HOME / .nvm та експортує звичайний повний шлях із лише реальними каталогами.
Німлар

10

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

Примітка. Я також $NVM_DIRмонтував і з'єднував з'єднання. Я перемістив його назад у свій гомедір.


8

Це може бути проблемою, якщо ваш домашній каталог десь встановлений, оскільки 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/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,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, як раніше. Я думаю, що це незвичайний випадок, коли все пішло не так і змусило мене перевстановити все, не схоже, що більшість людей проходять через це через цю проблему.


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-коду мають вирішити проблему:

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/isissue/1690#issuecomment-392014774


0

Я шукав рішення для проблеми з префіксом nvm, знайшов це питання (перш ніж знайти рішення). Ось мій "діалог" оболонки. Я сподіваюся, це може бути корисним для когось. Мені вдалося встановити префікс за допомогою цього повідомлення: https://github.com/npm/npm/isissue/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

0

У мене виникла ця проблема після переміщення домашньої папки на новий диск на Linux. Це було виправлено видаленням .nvm папки та перевстановленням nvm


0

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

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

BTW, будь ласка, встановіть 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/isissue/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 для використання глобально встановлених пакетів.


-2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.