関連:single node_modules folder for multiple projectsproject_name/node_modulesをシンボリックリンクとして使用していますか?
私はおそらく複数のプロジェクトで共有する共通のディレクトリに<some project>/node_modules
をシンボリックリンクすることができますnpm install -g
すべてのものは、推奨されていない、と私は個々のモジュールをリンクしない場合は?
関連:single node_modules folder for multiple projectsproject_name/node_modulesをシンボリックリンクとして使用していますか?
私はおそらく複数のプロジェクトで共有する共通のディレクトリに<some project>/node_modules
をシンボリックリンクすることができますnpm install -g
すべてのものは、推奨されていない、と私は個々のモジュールをリンクしない場合は?
ノードはシンボリックリンクを完全にうまく処理できます。これを達成する方法は、あなたの目標のいくつかに依存するつもりです。最も重要なこと:バージョンコントロールからプロジェクトをダウンロードする他の開発者にとって、あなたはどんな経験をしたいのですか?
この経験を設計する際には、可能なことについての洞察を得るために、ノードモジュールの読み込みアルゴリズムについて読むことが非常に役立ちます。一般的に
途中で警告が表示されたら、どうすればいいですか?最も簡単な方法は、さまざまなサブプロジェクトをカプセル化するスーパープロジェクトを作成することです。サブプロジェクトは、スーパープロジェクトの依存関係を効果的に継承します。
superproject/
|-- node_modules/
| +-- socket.io/
|-- package.json
|-- subprojectA/
| |-- node_modules/
| | +-- browserify/
| |-- package.json
| +-- app/
| +-- client.js
+-- subprojectB/
|-- node_modules/
| +-- express/
|-- package.json
+-- lib/
+-- server.js
この構造は、それがまだ可能である(あなたは、サブプロジェクト内のファイルは、自分のモジュールとsuperproject/node_modules
でそれらのいずれかをrequire()
できる期待するかもしれないが、彼らは彼らの兄弟サブプロジェクト内にない簡単require()
モジュールをする方法を動作します明示的なパスを使用します)。言い換えれば、client.jsはrequire()
をbrowserifyし、socket.ioにはパスを使用できませんが、require()
のパスを使用する必要があります。
npm
は、package.jsonを "検索"し、node_modules
ディレクトリ内のモジュールをインストール時などにそのファイルの兄弟として扱うということです。つまり、現在の作業ディレクトリサブプロジェクトにpackage.json
ファイルがない場合を除き、モジュールをインストールするにはsuperproject
にする必要があります。
非常に小さなプロジェクトであってもファイルがかなり大きくなり、(ほとんど)同じプロジェクトを使用している新しいプロジェクトを設定すると間接的に帯域幅が浪費されるため、 "重複した依存関係"依存関係。 – prusswan
私はそれらの欲望に関連することができます。しかし、私はあなたがこのように様々なプロジェクトを密接に結びつけることは、別の種類の負担を引き起こすことに気付くでしょう。プロジェクトxが特定の動作を必要とするため、依存関係を更新できない場所。しかし、プロジェクトyはそれを別々に使用しており、新しいものが必要なので、実際には更新する必要があります。昔は、すべてのnpmモジュールがグローバルであったが、コミュニティはそれが価値がないと気づいたので、この習慣は止まった。 https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/ 擬似グローバルモジュールを実行する方法はまだあります。 –
スーパープロジェクトはすばらしい解決策です!どうもありがとう。私の場合は、開発専用タスク(gulp)のためにノードを使用するいくつかのLaravel PHPプロジェクトに取り組んでいます。Gulpとrequire()はローカルにインストールされている場合にのみ動作しますが、5MBのPHPプロジェクトごとに200MBのnode_modulesを複製することは、特に自分自身でノード開発を行っていないため、完全に不合理です。私が見つけた唯一の賢明な解決策は、スーパープロジェクトだけです。私は、5.2で必要とされるツールの単一のコピーと5.2のプロジェクトのすべてと一緒にlaravel-5.2フォルダを持つことができます。ブリリアント! – Tobia