web-dev-qa-db-ja.com

nvmを介してノードとnpmをアップグレードしましたが、古いノードは引き続きグローバルパッケージに使用されます

私は長い間ノード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
+ [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環境変数をチェックしても、結果は得られません。

私がこれまでにしたこと:

  • nvm uninstall 9.3.0でノード9.3.0を削除します
  • Nvmを削除してコンピューターを再起動した後、nvmの新規インストールを実行します
  • nvm reinstall-with-packages
  • ~/.nvmrcを削除し、その後10.12.0を設定しました
  • 自作のノードが重複していないか確認してください。問題は何でしょうか。
9

数時間の苦痛なUnixデバッグの後、問題はnpm configにプレフィックスを設定したことであることに気付きました。

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

これを修正するには、次の手順でプレフィックスの設定を解除してください。

npm config rm prefix

これは 言及 ですが、nvmドキュメントでは必ずしも輝いているとは限りません

〜/ .npmrcファイルがある場合は、プレフィックス設定が含まれていないことを確認してください(nvmと互換性がありません)

13

nvm reinstall-packagesを実行する必要があるようです

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

それは言う


インストール中のグローバルパッケージの移行新しいバージョンのNode.jsをインストールし、npmパッケージを以前のバージョンから移行する場合:

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

これは、最初に「nvm version node」を使用して、パッケージの移行元の現在のバージョンを識別します。次に、リモートサーバーからインストールする新しいバージョンを解決してインストールします。最後に、「nvmreinstall-packages」を実行して、以前のバージョンのNodeから新しいバージョンにnpmパッケージを再インストールします。

次のように、特定のバージョンのNode)からnpmパッケージをインストールして移行することもできます。

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


もう1つの「解決策」は、グローバルパッケージを使用しないことです。特にnvmを使用していて、グローバルパッケージが「現在の」バージョンのものであるかどうかを確認できない場合は、ローカルにインストールし、npxを使用してローカルコマンドを実行することをお勧めします。

truffleは、npm installを実行するとtruffleコマンドを./node_modules/.binにインストールするため、truffleの代わりにnpx truffleを実行してグローバルを実行できます。 1


編集:

確認すべきもう1つの点は、node -vnvm 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
+ [email protected]
added 81 packages in 4.364s

したがって、nvm use v10コマンドが欠落している可能性があります

1
Paul D'Ambra

より永続的な解決策は このセクション サポートドキュメントからだと思います。

インストール中のファイルからのデフォルトのグローバルパッケージ

新しいバージョンをインストールするたびにインストールするデフォルトパッケージのリストがある場合は、それもサポートしています。パッケージ名を1行に1つずつ、ファイル$ NVM_DIR/default-packagesに追加するだけです。コマンドラインで、npmがパッケージ引数として受け入れるものなら何でも追加できます。

0
Guy