Обновленный узел и npm через nvm, но старый узел все еще используется для глобальных пакетов - PullRequest
0 голосов
/ 21 октября 2018

Я давно использую узел 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
+ truffle@4.1.14
added 81 packages from 311 contributors in 1.715s

И:

npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── truffle@4.1.14

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

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

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

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

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

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

Если вы столкнулись с подобной проблемой, убедитесь, что сняли ее сделать:

npm config rm prefix

Это действительно упоминается , хотя не обязательно светит на странице nvm:

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

0 голосов
/ 10 февраля 2019

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

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

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

0 голосов
/ 21 октября 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 для запуска глобального


edit:

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

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

enter image description here

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

enter image description here

 > 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
+ truffle@4.1.14
added 81 packages in 4.364s

Таким образом, вы можете пропустить команду nvm use v10

...