1. ホーム
  2. node.js

[解決済み] node.jsのアプリ間でコードを共有するには?

2023-04-23 08:03:44

質問

私はnodeでいくつかのアプリを持っており、それらはすべて私が書いたいくつかのモジュールを共有しています。これらのモジュールは npm を介して利用可能ではありません。 私はアプリ間で自由に共有できるようにしたいのですが、ディレクトリをコピーしたり、そのためにGitに頼ったりしたくありません。 また、これを行うためにシンボリックリンクを使用することもあまり好きではありません。

こんな感じでディレクトリを配置したいと思います。

app1
 server.js
 node_modules
  (public modules from npm needed for app1)
 lib
  (my own modules specific to app1)

app2
 server.js
 node_modules
  (public modules from npm needed for app2)
 lib
  (my own modules specific to app2)

shared_lib
 (my own modules that are used in both app1 and app2)

私が見ている問題は、shared_lib のモジュールが、実行中のアプリの node_modules ディレクトリにあるモジュールをどこで見つけるか、混乱しているように見えることです。 少なくとも、私はそれが問題だと考えています。

ファイルの重複を避けるために、これを行う良い方法は何ですか? (それらは私のコードではないので、node_modules内のものの重複を気にしないことに注意してください、私はそれらをGitにチェックしない、など)

どのように解決するのですか?

私は、これを node_modules フォルダを持つことで機能しています。

node_modules の中にモジュールを入れるために npm に公開する必要はないことに注意してください - ただ使えばいいのです。

"private": true

各プライベート パッケージ.json ファイル - あなたのプロジェクトの場合、私は次のようになります。

app1
 server.js
 node_modules
  (public modules from npm needed for app1)
  (private modules locally needed for app1)

app2
 server.js
 node_modules
  (public modules from npm needed for app2)
  (private modules locally needed for app2)

node_modules
  (public modules from npm needed for app1 & app2)
  (private modules locally for app1 & app2)

ポイントは、node.jsにはすでにこれを扱うためのメカニズムがあり、それは素晴らしいものだということです。 NPMにないプライベートなもの」というトリックと組み合わせれば、うまくいきます。

要するにa。

require('somemodule')

アプリ A またはアプリ B からは、モジュールが下層にあるか上層にあるかに関係なく、モジュールを見つけるまで上方にカスケード接続されます。 確かに、これなら require(...) ステートメントを変更することなく、場所をホットスワップすることができます。

node.jsモジュールのドキュメント