npmグローバルパスプレフィックス


142

私はいつもの行動よりも用心深くなっています。 npm過去のました。

私はMacを使用していて、からnode.jsをインストールしましたbrew install node

jslint.jsコマンドとしてコマンドラインで実行したいので、jslintこれを達成するための標準的な方法はsudo npm install -g jslint、次の出力で正常に実行されたことがわかります。

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

その後

$ jslint ply.js
zsh: command not found: jslint

/usr/local/share/npm/bin私の中にいないため$PATH

1)なぜbrewグローバルnpm binパスtoパスをインストールしなかったのですか?多分それはしましたが、何かzshがそれを台無しにしています。どこで見つけられますか?
2)これを行う必要がありますか?(私の下部に:/usr/local/share/npm/binエクスポートさ$PATHれた~/.zshrc

後で何かをインストールする場合(Homebrewなどを使用して)、パスを設定するためにzsh起動スクリプトに追加する必要があるため、これは適切な方法ではないようです。この特定の例でnpm install -gは、「適切な」場所に正しいシンボリックリンクを作成しないことの問題だと思います(/usr/local/bin多分。

私がやることは手動で内部にシンボリックリンクを構築することだと思います /usr/local/bin、私が問題を抱えているすべてのプログラムのにであり、それは私の目的にとって十分なはずです。

編集:私はこれを2019年に更新しています。この古い質問は人気がありますが、私の個人的なワークフローの点でも、ノードのインストールとさまざまな依存関係の管理に最善を尽くす方法の点でも古くなっています。

私の個人的なワークフローは、nodejs.orgから取得したインストーラーを使用してシステムにノードをインストールすることです。ファイルを管理する方法を最もよく知っているので、私は実際にはこれを自作パッケージ自体よりも信頼しています。システムノードを8.10から10.15に変更する場合は、MacとWindowsのどちらでも、OSの10.15用のnodejs.orgからインストーラーをダウンロードするだけです。私の経験では、homebrewを介してインストールされたノードをアップグレードしようとすることは、常により困難なアプローチであることが証明されています。

また、最大の注意点は、上記のjslintの例のnpm​​ installで示したsudoの使用は非常に推奨されないことです。私は、自作のパッケージをインストールしたり、スーパーユーザーを使用して何らかの方法で操作したりしてはならないことを確信しています。それは必要ではないはずであり、ファイル許可の頭痛の種につながります!

さらに、jslintよりもESLintをお勧めします。jslintを何年も使用していません。


おかげで、それらは現在修正されています。私は通常、不注意ではありませんが、この質問をすばやく入力しました
Steven Lu

@DaveNewtonええ、いつもそうです。この質問は本当にずさんな質問でしたが、私の最も人気のある質問の1つです。
Steven Lu

スクリーンショットよりもテキストをコピーする方が簡単ではないですか?とにかく修正されました。

1
@ saleemrashid1こんにちは。あなたは本当にそれを読んでそれをコピーしましたか?ありがとう。
Steven Lu、

3
うん!どういたしまして。私はゲームに取り組んでおり、NPMがダウンロードするのを待っている間に私はそれをしました!

回答:


308

あなたの拡張PATH

export PATH=/usr/local/share/npm/bin:$PATH

ひどい考えではありません。そうは言っても、あなたはそれをする必要はありません。

これを実行してください:

npm config get prefix

OS Xのデフォルトはです/usr/local。つまり、npmはバイナリを/usr/local/binにシンボリックリンクします。PATHです(特にHomebrewを使用している場合)。

そう:

  1. npm config set prefix /usr/local それが他の何かであるなら、そして
  2. sudonpmで使用しないでください!jslint docsによると、あなたはそれができるはずnpm installです。

npmをsudo(sudo brew install)としてインストールした場合は、プレーンなol 'で再インストールしてみてくださいbrew install。自作はあなたをsudo自由に保つのを助けることになっています。


1
ありがとう!ただし、グローバルnpmにインストールすることを拒否しjslintます。npm install -g jslint失敗します。Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
Steven Lu

2
私はする必要はありませんchown /usr/local、私は必要とせず、任意のスクリプトがそれにリンクを記述するために持っています場合はsudoこれに従ってnom / nodeを設定するのは~/.localどうですか?
Steven Lu

2
甘い!私が行って、ユーザーによって堆積様々なdirsに元に戻したroot私の中で~/(でディレクトリをsudo rm -rtmp/.npm/)、その後、npm install -g jslint美しく働きました。npm自体がノードプログラムであり、JSコマンドラインの概念実証のビットであることがきちんと整っているので、少し理解が深まったので、今すぐ理解し始めます。
Steven Lu

2
@StevenLuうん、chown-ing /usr/localとその中のすべてはOS Xの標準的なプラクティスです。Homebrewwiki のトラブルシューティングページを参照してください。
Trevor Burnham

うん、それはのように見えるchownのING /usr/localすでにそうでない私のマシン上で発生したnpmら、実行せずsudoにリンクを堆積させることができないだろう/usr/local/bin/など
スティーブン・呂

8

この問題にしばらく費やしましたが、PATHスイッチは役に立ちませんでした。私の問題は、ここで見つかったHomebrew / node / npmのバグでした-https ://github.com/npm/npm/issues/3794

Homebrewを使用してノードをすでにインストールしている場合は、****注を試してみてください。これは安全ではない可能性があることに注意してください。それは私にとってはうまくいきましたが、意図しない結果をもたらす可能性があります。また、Homebrewの最新バージョンではnpmが適切にインストールされているようです。だから、おそらく私がしようとするだろうbrew updatebrew doctorbrew upgrade node****しようとする前になど:

npm update -gf

または、Homebrewでノードをインストールしてnpmを機能させる場合は、次のコマンドを使用します。

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh

3
人々にグローバルに更新を強制することをさりげなく勧めることは良い考えではありません。
toxaq

1
インターネットで誰かからのアドバイスを盲目的にフォローすることは良い考えではありません。
Volte

-gfのforceメソッドは私のためにそれを作りました。ありがとうございました。
MEM

5

私はbrewを使用しており、プレフィックスはすでに次のように設定されています。

$ npm config get prefix
/Users/[user]/.node

binとlibフォルダーはrootが所有しているため、通常の非sudoインストールができなかったので、ユーザーに再所有した

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

次に、/ Users / [user]にある.bash_profileへのパスを追加しました

PATH=$PATH:~/.node/bin

3

brewは、-gを指定してnpmを実行している場合でも、sudoを使用するように要求するべきではありません。これにより、実際にはさらに多くの問題が発生する可能性があります。

通常、brewまたはportを使用するとパスを更新できるため、.zshrc、.bashrc、.cshrc、または使用しているシェルのフレーバーを台無しにするリスクはありません。


実際、brewはを必要とせず、の使用を推奨しませんsudo。私はsudoを使用していましたnpm(読んだことが私に言ったため)。パスがどのように設定されているかを調べる場所に興味があります。実際には、zshインストーラーが(のインストール時にzsh)パスをハードコーディングして、.zshrc私があまり好きではないパスを実行しているようです
Steven Lu

によってインストールされるものnpm すべてにインストールする必要があります/usr/local/usrパスの名前空間には、お使いのディストリビューションの公式パッケージ用に予約されています。/usr/local/bin$ PATHにあるかどうかは、zshの問題です。
フロービー2013

brewスクリプトは起動スクリプトに何も追加しません。これはあなたがする必要があることです。例については、madebyhoundstooth.com / blog / install-node-with-homebrew-on-os-xをご覧ください。
Pascal Belloncle、2013

2

次のようにして、Vue Cliのコマンドエラーを修正しました。

  • ターミナルで sudo nano ~/.bash_profile bashプロファイルを編集します。
  • 追加 export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • ファイルを保存してターミナルを再起動します
  • これでvue create my-projectvue --versionなどを使用できるようになります。

から最新のVue Cliをインストールした後、これを行いました https://cli.vuejs.org/

私は通常糸を使用しますが、これをnpmでグローバルにインストールしました npm install -g @vue/cli。よろしければ糸も使えますyarn global add @vue/cli

注:すでにインストールされている場合は、まずグローバルにアンインストールする必要があります。 npm uninstall -g vue-cli

お役に立てれば!


1
これは基本的に私のために働いた。PATH = $ PATH:/ Users / [your username] /node_modules/.binをエクスポートするように調整する必要がありました
Mike Carpenter


0

実行してみてください:

PATH=$PATH:~/npm/bin

expressコマンドラインで実行してテストを行います。これでうまくいきました。


あなたがそういう意味~/.npm/binかかなり確かです npmホームディレクトリに追加されたディレクトリはありません。
Steven Lu

0

sudoコマンドを使用してノードパッケージをリンクした場合

次に、node_modulesがグローバルにインストールされているフォルダーに移動します。

Unixシステムでは、グローバルにインストールされた場合、通常/ usr / local / lib / nodeまたは/ usr / local / lib / node_modulesに配置されます。NODE_PATH環境変数をこのパスに設定すると、モジュールはノードごとに見つかります。

Windows XP-%USERPROFILE%\ Application Data \ npm \ node_modules Windows 7-%AppData%\ npm \ node_modules

次にコマンドを実行します

ls -l

これにより、すべてのグローバルnode_modulesのリストが表示され、リンクされたノードモジュールを簡単に確認できます。


0

sudo brewはオプションではなくなったので、この時点でbrewを使用してインストールすると、2つの本当に不愉快なものが得られます/usr/local/opts。これは最初は大したことではありませんが、特にlintをインストールしたときにノードPATHに問題がありました。B:この方法でアンインストールしてインストールするか、Bitnamiからスタックを取得できるようになるまでは、sudoコマンドに困っています

複数のプロジェクトがある場合は準備ができているので、スタックオプションよりもこの方法をお勧めします。事前に作成されたMEANスタックを使用する場合は、httpd.confで仮想ホストを設定する必要があります(このスタックではXAMPPよりも面倒です)。通常の更新では、追加ごとにextra / vhosts.confと/ etc / hostsを更新します。プロジェクト(更新を完了したときにサーバーを再ポイントして再起動する場合を除く)。


0

簡単な解決策は...

コマンドの下に置くだけ:

  1. sudo npm config get prefix

    これらのようなものでない場合は/usr/local、以下のコマンドを使用して修正する必要があります。

  2. sudo npm config set prefix /usr/local...

今では100%正常に動作しています


npmではsudoを使用しないことを強くお勧めします。私の編集を参照してください。
Steven Lu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.