グローバルノードモジュールが正しくインストールされていません。コマンドが見つかりません


82

グローバルノードモジュールのインストールに問題があり、オンラインで見つけたものはすべて、解決策は-gを追加するだけだと言っています。これは問題ではありません。リンクの問題か、ディレクトリの間違いの問題だと思います。

これが私がすることです:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found

ただし、直接リンクの場所を実行してそれを表現すると、次のように機能します。

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly

モジュールの場所:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

私の.bash_profileには、次のものがあります。

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

正しいフォルダーにダウンロードするには、ノード環境を変更する必要がありますか?何かが正しくリンクされていませんか?迷っています..

ありがとう!

その他の仕様:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2

1
これは、/ usr / local / share / npm / bin /がシェルの$ PATHにないためです。そのため、シェルはを見つけることができませんexpress
JPリチャードソン

2
追加しました:export PATH = / usr / local / share / npm / bin:$ PATHを.bash_profileに追加すると、機能しました。ありがとう!回答を追加して、受け入れて賛成できるようにします。
im_benton

私の場合、OSXのセラー経由でNPMもインストールしています。 bin私は.bash_profileの中で設定されたパスは、次のとおりです。export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
シェーン

回答:


63

次の$(npm get prefix)/binように、PATH(たとえば、で.bashrc)に追加します。

echo "export PATH=$PATH:$(npm get prefix)/bin" >> ~/.bashrc

詳細については、以下を参照してくださいnpm help npm

グローバルモード:npmはprefix / lib / node_modulesのインストールプレフィックスにパッケージをインストールし、binはprefix / binにインストールされます。

インストールプレフィックスはnpm get prefixまたはで見つけることができますnpm config list | grep prefix


nvmを使用する非sudoの場合はどう$HOME/.npmでしょうか。パスは、.bash_profileまたは.bashrcにすべきではありませんか?私はnvmを使用しているので、これに物事を交差させないようにしたいと思います。
blamb 2017年

OSXにHomebrew経由でNodeとnpmをインストールした人は、に追加する必要のあるbi​​nフォルダーの場所はにPATHなります/usr/local/Cellar/node/VERSION_NUMBER/bin/
JonBetts20年

135

これは、ノードのインストールプレフィックスが期待したものではないことを意味している可能性があります。

次のように設定できます。

npm config set prefix /usr/local

その後、実行してみてください npm install -gして。うまくいくはずです。Macで私のために働いた、そして解決策はこのサイトから来る:

http://webbb.be/blog/command-not-found-node-npm/

編集:私がセットアップしている新しいMacでこれに再び遭遇し、stackoverflowでもここで詳述されているプロセスを実行しなければならなかったことに注意してください。


私は使用nodenvしていますが、私の場合、この問題を解決するためのより良い方法がある可能性があります。しかし、あなたの解決策は迅速で汚い修正として機能しました!次に、プレフィックスをプレフィックスに戻しnodenv、からパッケージを実行できました/usr/local path。ありがとう!
ギャレットタコロンテ2017年

3
私はこれを修正することを意味するために何ヶ月も費やしました、そしてこれは私が私のためにそれを修正したのを見た唯一の答えです!どうもありがとうございました。
azz0r 2017年

それでも私にはうまくいきません。私に何ができる?win7にグローバルにtypescriptをインストールしたい。
人工2017

1
私はたくさんの解決策を試しましたが、これだけが私のためにそれをしました。何らかの理由で、/Users/(username)/.npm-globalすべてを新規インストールしたにもかかわらず、プレフィックスがに設定されました。私はMac上でもよ
Castilho

Cellar経由でNodeをインストールした場合、これはあなたを壊します。
シェーン

12

私のnpmはグローバルパッケージも見つけることができませんでした。私はブラッドパークスが提案したことをしました:

npm config set prefix /usr/local

次に、EACCESパーミッションエラー(使用しないでください)を受け取りsudo npm install -g <package>、公式のnpmドキュメントで修正しました:https//docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. コマンドラインのホームディレクトリに、グローバルインストール用のディレクトリを作成します。
 mkdir ~/.npm-global
  1. 新しいディレクトリパスを使用するようにnpmを構成します。
 npm config set prefix '~/.npm-global'
  1. 好みのテキストエディタで、〜/ .profileファイルを開くか作成して、次の行を追加します。
 export PATH=~/.npm-global/bin:$PATH
  1. コマンドラインで、システム変数を更新します。
 source ~/.profile
  1. 次に、パッケージをグローバルにインストールしてテストします。例えば:
npm install -g awsmobile-cli
awsmobile configure


みなさん、こんにちは。質問があります。手順2の後、〜/ .npm-globalにbin /が見つかりません。だから、それはうまくいきませんよね?
AquariusPotter

それでも動作するはずです。そのexport PATH=~/.npm-global/bin:$PATH行が〜/ .profileファイルにあることを忘れないでください。エラーが発生しましたか?
ビセンテ

6

私の場合、NODE_PATH環境変数は空でした。空かどうかを確認してください-

echo $NODE_PATH

NODE_PATHが空の場合。次に、〜/ .bash_profileを変更し、NODE_PATHを追加します

nano ~/.bash_profile
export NODE_PATH=`npm root -g`
source ~/.bash_profile

npmモジュールを再度インストールし、それがパスにインストールされているかどうかを確認します npm root -g


この!NVMを使用しているとき、私の問題があるとREPLのは、それは、Linux / Fedoraの上でグローバルなパッケージを探して持っている必要が
レイフォス

4

私は今までにないsudoを経由して、任意のNPMのものをインストール!私には独自の理由がありますが、これはユーザー開発の世界であり、誰もがrootアクセス権を持っているわけではなく、このようなroot / sudoのインストールは開始時に混乱しているように見えるため、単純でユーザーベースに保つようにしています。と。結局のところ、特権のあるsudoユーザーだけでなく、すべての開発者がこれらの指示に従うことができるはずです。

この特定のシステムは、SSH経由でアクセスされるRHEL7です。

多くの場合、さまざまなバージョンのノードが必要になるため、NVMhttps ://github.com/creationix/nvmを使用します

そうは言っても、私はあなたに実用的な例を示すことができます -g NVM、NPM、およびルートを使用しないノードパスを使用グローバルインストールの的な。

プレフィックスを.npm-packagesまだ設定していない場合は設定します。(これはハイフンであり、アンダースコアではないことに注意してください)

nvm config ls
prefix = "/home/<yourusername>/.npm-packages"

次に、以下の情報を使用して理由と理由をここで確認したい場合は、〜/ .bash_profileまたは.bashrcを調整します 。

#PATH EXPORTS
NODE_MODULES=$HOME/.npm                                          
NPM_PACKAGES=$HOME/.npm-packages/bin                           
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES         

#NVM ENABLE                                                 
export NVM_DIR="$HOME/.nvm"                                   
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

それはほとんどすべての道をカバーしています。たとえば、このようにgulpをインストールするnpm install -g gulpと、シンボリックリンクされます~/.npm-packages/bin(アンダースコアではなくハイフンであることに注意してください)。(、、gulp-cliまたはの必要はありませんgulp-cl

他のすべてのノードパスエクスポートをほぼ置換/コメントアウトできます。このパス情報は、他のパス情報の下に安全に配置できます。上書きすることはありません。


1
  1. 次の行をに追加します ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. bashプロファイルをロードする

    bash -l
    


0

私が抱えていた問題は、ホームディレクトリのユーザー固有の.npmrcファイルがに設定されていたためにバイナリ欠落していたことでした。bin-linksfalsedefault is true

これが問題である場合に備えて、.npmrcファイルのいずれにもfalseに設定されていないことを確認してください。

次に、すべてのモジュールを再インストールすると、でバイナリが作成され、それらを表示できるprefixようになりますPATH


0

グローバルノードモジュールのバイナリフォルダーを確認し、それを$ PATHに追加します。

npm list -g | head -1

nodenvを使用する場合、グローバルノードバージョンをインストールするたびにパスが変更されます。このようなパスを追加すると、私の問題は解決します。

"$HOME/.nodenv/versions/$(nodenv global)/bin"

zshへのパスを追加するためのショートカット

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.