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

Я давно использую узел 9.3.0, но недавно перешел на 10.12.0. Все прошло нормально, когда я делаю node -v и npm -v я получаю правильные версии:

Paul-Bergs-Macbook:node paulrberg$ node -v
v10.12.0
Paul-Bergs-Macbook:node paulrberg$ which node
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/node
Paul-Bergs-Macbook:node paulrberg$ npm -v
6.4.1
Paul-Bergs-Macbook:node paulrberg$ which npm
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/npm

Однако, когда я пытаюсь запустить любую команду npm, используется старая версия. То есть:

Paul-Bergs-Macbook:node paulrberg$ npm i truffle -g
/Users/paulrberg/.nvm/versions/node/v9.3.0/bin/truffle -> /Users/paulrberg/.nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
+ [email protected]
added 81 packages from 311 contributors in 1.715s

А также:

npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── [email protected]

Не уверен, что это какой-то код bash, все еще указывающий на последнюю версию, но я не могу найти никаких доказательств этого. Запуск env и проверка переменных окружения 9.3.0 не дают результата.

Что я сделал до сих пор:

  • Удалить узел 9.3.0 с nvm uninstall 9.3.0
  • Сделайте новую установку nvm после ее удаления и перезагрузки компьютера.
  • nvm reinstall-with-packages
  • Удалил ~/.nvmrc и потом поставил 10.12.0
  • Проверьте, есть ли у меня перекрывающийся узел из доморощенного, а у меня нет. В чем может быть проблема?

person Paul Razvan Berg    schedule 21.10.2018    source источник
comment
Попробуйте удалить 9 версию узла   -  person Piterden    schedule 21.10.2018
comment
Я делал это несколько раз через nvm uninstall 9.3.0. Когда я выполняю npm install truffle -g или любую команду npm, 9.3.0 снова устанавливается.   -  person Paul Razvan Berg    schedule 21.10.2018
comment
Вопрос: версия 9.3.0 установлена ​​заново, или директория создана?   -  person Ayush Gupta    schedule 21.10.2018
comment
Фактический узел 9.3.0, кажется, установлен в каталоге nvm. Когда я снова запускаю nvm ls, я получаю как 10.12.0, так и 9.3.0 после установки глобального модуля npm (или фактического выполнения любой команды с помощью npm).   -  person Paul Razvan Berg    schedule 21.10.2018


Ответы (3)


После нескольких часов мучительной отладки Unix я понял, что проблема в том, что я установил префикс в npm config:

prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"

Чтобы это исправить, обязательно отключите префикс, выполнив следующие действия:

npm config rm prefix

Это упоминается, хотя и не обязательно освещается в документе nvm.

Если у вас есть файл ~/.npmrc, убедитесь, что он не содержит настроек префикса (что несовместимо с nvm).

person Paul Razvan Berg    schedule 21.10.2018

Похоже, вам может понадобиться запустить nvm reinstall-packages

https://github.com/creationix/nvm#migrating-global-packages-while-installing

что говорит


Перенос глобальных пакетов во время установки. Если вы хотите установить новую версию Node.js и перенести пакеты npm из предыдущей версии:

nvm install node --reinstall-packages-from=node

Сначала будет использоваться «узел версии nvm», чтобы определить текущую версию, из которой вы переносите пакеты. Затем он разрешает новую версию для установки с удаленного сервера и устанавливает ее. Наконец, он запускает «nvm reinstall-packages», чтобы переустановить пакеты npm из вашей предыдущей версии Node в новую.

Вы также можете установить и перенести пакеты npm из определенных версий Node следующим образом:

nvm install 6 --reinstall-packages-from=5 nvm install v4.2 --reinstall-packages-from=iojs


Другое «решение» — не использовать глобальные пакеты. В частности, при использовании nvm и невозможности быть уверенным, что глобальный пакет предназначен для «текущей» версии, может быть лучше установить локально и использовать npx для запуска локальной команды.

truffle устанавливает команду truffle в ./node_modules/.bin, когда вы npm install это делаете, чтобы вы могли npx truffle запускать локальную вместо truffle запускать глобальную


редактировать:

еще одна вещь, которую нужно проверить, это то, что node -v и nvm current не обязательно сообщают об одной и той же версии.

Интересно, nvm current сообщит вам о v9.3?

введите здесь описание изображения

ах, да, на моей машине я могу глобально установить трюфель в другом месте, чем node -v сообщает

введите здесь описание изображения

 > node -v
v9.5.0
 > nvm current
system
 > nvm use v8
Now using node v8.4.0 (npm v5.3.0)
 > node -v
v8.4.0
 > nvm current
v8.4.0
 > npm install -g truffle
/Users/pauldambra/.nvm/versions/node/v8.4.0/bin/truffle -> /Users/pauldambra/.nvm/versions/node/v8.4.0/lib/node_modules/truffle/build/cli.bundled.js
+ [email protected]
added 81 packages in 4.364s

Так что вам может не хватать команды nvm use v10

person Paul D'Ambra    schedule 21.10.2018
comment
К сожалению, я уже пробовал nvm reinstall-packages безуспешно. Спасибо за предложение с npx, но я бы все равно оставил глобальные пакеты такими, какие они есть. - person Paul Razvan Berg; 21.10.2018
comment
да, не беспокойтесь, я обнаружил, что npx менее сбивает с толку при использовании nvm, но предлагается только в качестве обходного пути :) добавил еще одну возможность, которая позволяет мне воссоздать вашу проблему на моей машине - person Paul D'Ambra; 21.10.2018
comment
Я уже делал nvm use 10.12.0 несколько раз. nvm current возвращает 10.12.0, это определенно причудливая ошибка :/ - person Paul Razvan Berg; 21.10.2018
comment
крики, это действительно так! надеюсь разберетесь :) - person Paul D'Ambra; 21.10.2018

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

Глобальные пакеты по умолчанию из файла при установке

Если у вас есть список пакетов по умолчанию, которые вы хотите устанавливать каждый раз при установке новой версии, мы также поддерживаем это — просто добавьте имена пакетов, по одному на строку, в файл $NVM_DIR/default-packages. Вы можете добавить все, что npm примет в качестве аргумента пакета в командной строке.

person Guy    schedule 10.02.2019