簡體   English   中英

通過nvm升級節點和npm,但舊節點仍用於全局包

[英]Upgraded node and npm via nvm, but old node is still used for global packages

我已經使用節點9.3.0很長一段時間了,但我最近遷移到10.12.0。 一切都很順利,當我做node -vnpm -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環境變量不會產生任何結果。

到目前為止我做了什么:

  • 使用nvm uninstall 9.3.0刪除節點nvm uninstall 9.3.0
  • 刪除它並重新啟動計算機后,重新安裝nvm
  • nvm reinstall-with-packages
  • 刪除~/.nvmrc並在之后設置10.12.0
  • 檢查我是否有自制的重疊節點,我不知道問題是什么?

經過幾個小時的Unix調試,我意識到問題是我在npm config設置了一個前綴:

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

如果你遇到類似的問題,請務必通過以下方式取消設置:

npm config rm prefix

確實提到了這一點,盡管不一定會在nvm頁面上發光:

如果您有〜/ .npmrc文件,請確保它不包含任何前綴設置(與nvm不兼容)

看起來您可能需要運行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”將你之前版本的Node的npm軟件包重新安裝到新版本。

您還可以從特定版本的Node安裝和遷移npm軟件包,如下所示:

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


另一個“解決方案”不是使用全局包。 特別是當使用nvm並且無法確定全局包是否適用於“當前”版本時,最好在本地安裝並使用npx來運行本地命令

當你npm install它時,松露會為./node_modules/.bin安裝一個truffle命令,這樣你就可以npx npx truffle運行本地truffle而不是truffle來運行全局


編輯:

要檢查的另一件事是node -vnvm 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
+ truffle@4.1.14
added 81 packages in 4.364s

所以你可能會錯過一個nvm use v10命令

我認為這個部分來自支持文檔, 是一個更永久的解決方案。

安裝時來自文件的默認全局包

如果您希望每次安裝新版本時都安裝默認軟件包列表,我們也支持 - 只需將軟件包名稱(每行一個)添加到文件$ NVM_DIR / default-packages中。 您可以在命令行中添加npm作為包參數接受的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM