package.jsonでnode_modulesへのパスを指定します


96

アプリケーションのnode_modulesディレクトリを移動して、bowerがbowerrcファイルで行うように/ vendor / node_modulesと言う方法はありますか?package.jsonで指定できると思いましたが、解決策が見つからないようです。あなたの助けは大歓迎です。



@blunderboyリンクをありがとう。それを行う簡単な方法がないのはクレイジーです。しかたがない。
sturoid 2014年

27
明らかにあなたの質問に答えない答えをあなたが受け入れた理由がわかりません。あなたはへのパスを設定する方法を尋ねるnode_modules package.json、かつxShiraseの答えは単純にそれを行うための方法を提供していません。
マークアメリー2017年

4
これは明らかにXYの問題であり、「申し訳ありませんが、それは不可能です」よりも代替の解決策の方が優れているため、彼はおそらく答えを受け入れました。
ジェイク

回答:


58

はい、できます。NODE_PATH環境変数を設定するだけです。

export NODE_PATH='yourdir'/node_modules

ドキュメントによると:

NODE_PATH環境変数がコロンで区切られた絶対パスのリストに設定されている場合、ノードはそれらのパスでモジュールが他に見つからない場合はそれらのパスを検索します。(注:Windowsでは、NODE_PATHはコロンではなくセミコロンで区切られます。)

さらに、ノードは次の場所を検索します。

1:$ HOME / .node_modules

2:$ HOME / .node_libraries

3:$ PREFIX / lib / node

ここで、$ HOMEはユーザーのホームディレクトリであり、$ PREFIXはノードで構成されたnode_prefixです。

これらは主に歴史的な理由によるものです。依存関係をnode_modulesフォルダーにローカルに配置することを強くお勧めします。それらはより速く、より確実にロードされます。

ソース


1
それは素晴らしい。したがって、構築している各アプリケーションへのローカルnode_modulesがある場合、プロジェクトのjsファイルでそのエクスポートを行いますか?
sturoid 2014年

3
いいえ、これは環境変数であり、システムレベルで設定されます。したがって、端末に入力する必要があります。process.env
環境

うーん、いいですね。もう少し調べなければなりません。助けてくれてありがとう。
sturoid 2014年

114
これが質問に対する答えだとは思いません。彼はpackage.json内に、LOCAL(アプリケーションレベル)npm-Packagesのパスを配置するためのプロパティを要求していました。この回答は、グローバル(-g)でインストールされたパッケージを別のフォルダーに移動する方法を示しています。
David Losert 2016年

2
@IsmailIqbal申し訳ありませんが、あなたのコメントを今見ました。NPMの世界で2年が経ち、キャッシング、yarn、さらにはnpm5、webpackでかなりの飛躍を遂げました...最近のnode_moduleの処理ははるかに優れていると思います。あなたの場合、私は単にすべての場所で「npmインストール」を実行します-npmはすでにインストールされたパッケージをキャッシュするので、オーバーヘッドなしで手動でコピーするのと同じです。
DavidLosert18年

28

要するに:それは不可能であり、サポートされることはないようです(https://github.com/npm/npm/issues/775を参照)。

CLIまたはENV-Variables(現在選択されている回答を参照)、. npmrc-Config-Files、またはnpm link-それらすべてに共通するものを使用すると、いくつかの厄介な回避策があります。これらはプロジェクト固有ではなく、常に何らかの種類です。globalソリューション。

私にとって、これらのソリューションはどれも本当にクリーンなものではありません。プロジェクトへの貢献者は常に特別な構成を作成するか、特別な知識を持っている必要があるからnpm installです。

つまり、package.jsonをnode_modulesをインストールするのと同じディレクトリに配置するか、プロジェクトのroot-dirに常に存在するという事実を維持する必要があります。


16
「「node_modules」のつづりを変えたい場合は、申し訳ありませんが、できません。これはノードコアに組み込まれています。これを変更することは、まったく異なるパッケージマネージャーを構築することと同じです。」<==私が推測する変数を使用して良い仕事。
stevedbrown 2017年

2019年からのコメント:yarnはモジュールディレクトリのオーバーライドをサポートしているようです。そうですね、yarnは新しいパッケージマネージャーだと思います。
バヌアン

10

Yarnはこの機能をサポートしています。

# .yarnrc file in project root
--modules-folder /node_modules

ただし、使用するパッケージによってエクスペリエンスは異なる場合があります。あのうさぎの穴に入りたいかどうかはわかりません。


6

これがあなたの考えていることかどうかはわかりませんが、node_modulesシンボリックリンクをサポートしていないファイルシステム(VMの「共有」フォルダー)にマウントされていたため、プロジェクトディレクトリ内にインストールできなかったため、この質問に行き着きました。 )。

次の回避策を見つけました。

  1. package.jsonファイルを別のファイルシステムの一時フォルダーにコピーします
  2. npm installそこに走る
  3. シンボリックリンクをコピーに展開するためnode_modulesに使用cp -r --dereferenceして、結果のディレクトリをプロジェクトディレクトリにコピーして戻します。

これがnode_modules、別のファイルシステムに移動する方法を探しているときにこの質問にたどり着く他の誰かに役立つことを願っています。

その他のオプション

そこ別の回避策、である私は@Charminbearがにリンクされていることをgithubの問題で見つかったが、これは動作しませんgrunt、それはサポートされていないため、NODE_PATHあたりとしてhttps://github.com/browserify/resolve/issues/136を

持っていて/media/sf_shared、そこにシンボリックリンクをインストールできないとしましょう。つまり/media/sf_shared/myproject、一部のモジュールはシンボリックリンクを使用しているため、実際にはnpmインストールからインストールできません 。

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (この方向にシンボリックリンクすることはできますが、/ media / sf_shared内にシンボリックリンクを作成することはできません)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.