私は node.js ベースのフレームワーク/サーバーに取り組んでいます。このフレームワークは Express サーバーを起動し、ローカル ディレクトリからすべてのプラグインを自動的に読み込みます。フレームワークと個々のプラグインには、それぞれ独自の git リポジトリがあります。
フレームワークはこちら: https://github.com/Appsecute/appsecute-connector-multi (プラグインの読み込みについては server.js を参照)。
プラグインの例は次のとおりです: https://github.com/Appsecute/appsecute-connector-multi-heroku (プラグイン定義/ブートストラップ ファイルについては、connector.js を参照してください)。
これはすべてローカルで正常に機能します。次に、Heroku にデプロイします。私の計画は、フレームワークと指定されたプラグインのクローンを作成し、デプロイの準備が整ったフォルダー構造を構築する小さなスクリプトを作成することでした。
ここにこのスクリプトを書きました: https://github.com/Appsecute/appsecute-connector-multi-deployment
さて、私の質問ですが、アプリケーションのルート (フレームワーク) と特定のサブディレクトリ (各プラグイン) の両方で「npm install」を実行するよう Heroku に指示することは可能ですか?
ノードは、モジュールをロードしているスクリプトに関連する最も近い node_modules フォルダー内を検索することを知っているため、プラグインがモジュールをロードしようとすると、ノードは最初に app_root/plugins/plugin_name/node_modules を検索します-これはまさに私が望むものです、モジュールがそこにあることを確認するために Heroku が必要なだけです。
最初は、ビルド スクリプトをさまざまなディレクトリに移動させて npm インストールを実行することを計画していましたが、Heroku が独自の npm インストールを実行することを思い出しました。
私の他のオプションは、各プラグイン package.json ファイルのすべての依存関係を検査するコードを記述し、すべての依存関係を結合して、アプリのルートにある package.json に書き出すことです。このように、Heroku が npm install を実行すると、すべての依存関係がインストールされます。これは脆く聞こえ、異なるプラグインが同じモジュールの異なるバージョンを指定するとおそらく失敗します。
そして、これらすべてが最終的に疑問を投げかけます。私はこれを間違っているのでしょうか? 別のアーキテクチャ/レポ構造などを検討する必要がありますか?