npmパッケージのローカルインストールのカスタムの場所を設定する方法


177

npm installコマンドフラグまたは環境変数を使用して、のカスタムパッケージ宛先を指定することは可能ですか?

デフォルトでは、npmローカルインストールnode_modulesは現在のディレクトリ内で終了しますが、node_modulesたとえば、別のディレクトリ内にインストールしますvendor/node_modules。どうすれば実現できますか?


あなたは何を成し遂げようとしているのですか?これは、ここで議論されている:stackoverflow.com/questions/13668097/...
パスカルBelloncle

10
@PascalBelloncle:のサブディレクトリにパッケージをインストールする代わりに、./node_modulesnpmでの サブディレクトリにパッケージをインストールします./vendor/node_modules。(またはそれは構成可能ではないと言われます。)
2013

1
それはあなたがやりたいことだと私は理解しました、それは私が最初から可能ではないと思います。plus requireも機能しません。だから私はなぜあなたがこれをしたいと思ったのかを尋ねていました。多分あなたがしたいことをするための代替ソリューションがあります。
Pascal Belloncle、2013

1
バイナリのみのパッケージをインストールします(つまり、コマンドラインでのみ使用され、required は使用されません)が、グローバルにインストールしたくありません。
pje 2013

そうですか。以下の私の提案をご覧ください。
Pascal Belloncle、2013

回答:


180

TL; DR

これを行うには、--prefixフラグと--global*フラグを使用します。

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

*これは「グローバル」インストールですが、インストールされたビンは、に~/foo/vendor/node_modules存在しない限り、コマンドラインからアクセスできませんPATH

TL; R

のすべての構成可能な属性はnpm、6つの異なる場所のいずれかに設定できます。優先順:

  • コマンドラインフラグ: --prefix ./vendor/node_modules
  • 環境変数: NPM_CONFIG_PREFIX=./vendor/node_modules
  • ユーザー設定ファイル: $HOME/.npmrcまたはuserconfigparam
  • グローバル構成ファイル: $PREFIX/etc/npmrcまたはuserconfigparam
  • 組み込みの設定ファイル: path/to/npm/itself/npmrc
  • デフォルトの構成: node_modules / npmconf / config-defs.js

デフォルトでは、ローカルにインストールされたパッケージはに移動し./node_modulesます。グローバルなものはprefix設定変数に入ります(/usr/localデフォルト)。

実行するnpm config listと、現在の構成を確認しnpm config editて変更できます。

PS

一般的に、npmのドキュメントは非常に役立ちます。フォルダのセクションは、NPMの良好な構造概要で、設定セクションでは、この質問に答えます。


2
I試験として、上記のコマンドに従って実際にあれば、それがにインストールされます ./vendor/node_modules/lib/bower使用してnpm#3.8.0
電子雲

2
これを行うと、エラーが発生しますNo version provided in package.json
FooBar

あなたが書いbins won't be accessible through the command lineます。もちろん、プログラムは完全なパスnpm install eslint@3.4.0 -g --prefix c:\my_npm` calling c:\ my_npm \ eslint --fix my.js` を使用して呼び出すことができます
BernhardDöblerOct

13
package.jsonファイルで同様のことを達成することは可能ですか?つまり、npm installpackage.jsonファイルを使用してディレクトリAで実行すると、パッケージはディレクトリBにインストールされます。このソリューションは、個別のパッケージをインストールするためのものです。
Ryan-Neal Mes 2016年

1
この方法を使用してすべての依存関係をインストールする方法はありますか?npm install依存関係をローカルにインストールします。npm install X -g -prefix "..."モジュールXをプレフィックスにnpm install -g -prefix "..."インストールし、現在のパッケージをプレフィックスにインストールします。
AnnanFay

28

設定でこれが必要な場合は、npm configを次のように設定できます。

npm config set prefix "$(pwd)/vendor/node_modules"

または

npm config set prefix "$HOME/vendor/node_modules"

設定を確認してください

npm config ls -l

または、@ pjeが言うように、--prefixフラグを使用する


4
これはグローバルプレフィックスを設定すると思いますか?そのnpm installため、ローカルにインストールされます./node_modulesが、npm install -gにインストールされ"$(pwd)/vendor/node_modules"ます。これを忘れて忘れてしまう設定を想像できます。後で戻って、なぜ私のグローバルパッケージが奇妙に動作しているのか疑問に思います。
AnnanFay

13

OSXの場合、ユーザーの$HOME(おそらく/ Users / yourname /)に移動し、まだ存在しない場合は、.npmrcファイル(npmがユーザー設定に使用するファイル)を作成し、npmパッケージ用のディレクトリを作成します(たとえば、/ Users / yourname / npm)にインストールされます。その.npmrcファイルで、「prefix」を新しいnpmディレクトリに設定します。このディレクトリには、「グローバル」にインストールされたnpmパッケージがインストールされます。これらの「グローバル」パッケージは、明らかに、ユーザーアカウントでのみ使用できます。

.npmrc内:

prefix=${HOME}/npm

次に、コマンドラインから次のコマンドを実行します。

npm config ls -l

独自のローカル構成とグローバルnpm構成の両方に出力が表示され、ローカルプレフィックス構成が反映されているはずです。おそらく、出力の長いリストの上部にあります。

セキュリティ上の理由から/usr/local、他の場所で推奨されているフォルダーの変更よりも、ユーザーアカウントのnpm動作を構成するためにこのアプローチをお勧めします。


9

たとえばWindows 7では、次のコマンド/操作のセットを使用できます。

個人用の環境変数を作成します。二重のバックスラッシュは必須です:

  • 変数名: %NPM_HOME%
  • 変数値: C:\\SomeFolder\\SubFolder\\

ここで、設定値を新しいフォルダーに設定します(サンプルファイル名)。

  • npmフォルダーを設定する

npm config set prefix "%NPM_HOME%\\npm"

  • npm-cacheフォルダーを設定する

npm config set cache "%NPM_HOME%\\npm-cache"

  • npm一時フォルダーを設定する

npm config set tmp "%NPM_HOME%\\temp"

オプションで、構成が変更される前に、元のフォルダーの内容をパージできます。

  • npm-cacheを削除する npm cache clear

  • npmモジュールを一覧表示する npm -g ls

  • npmモジュールを削除する npm -g rm name_of_package1 name_of_package2


1
おかげで、私は手順に従います。しかし、c:/ npm_home / npmの代わりにc:/%NPM_HOME%/ npmなどのディレクトリが作成されます
Jay

6

これを自分で検索した後、共有依存関係を持ついくつかのプロジェクトをDRYerにしたいのですが、次のことがわかりました。

  • ローカルでインストールすることは、あなたが経由して使いたいもののためのノードの方法です require()
  • グローバルにインストールすることは、パスに含めるバイナリ用ですが、 require()
  • あなたは適切な追加する必要が接頭辞手段使うbinmanへのパスを$PATH
  • npm linkinfo)ローカルインストールをグローバルのソースとして使用できます

→ノードの方法に固執し、ローカルにインストールします

ref:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.