web-dev-qa-db-ja.com

Node.jsアプリのプライベートモジュール。それらをどこに置くか?

状況は次のとおりです。

Node.js開発環境でP1とP2の2つのプロジェクトを開発しています。

P1では、_P1/lib_に格納されている2つの単純なモジュールmod1とmod2の開発が必要でした。このモジュールが解決するたびに、_P1/node_modules_で外部依存関係が見つかります。 P1に必要な依存関係は、npmを介してこのフォルダーにインストールされています。

他のプロジェクトP2でmod1を再利用したい画像ですが、ここで私の疑問が浮かび上がりました。私はできた...

  • Mod1を_P2/lib_にコピーするだけです。レプリケーションなので、このオプションは考慮していません。

  • P2から、P1のmod1を参照します:require($PROJECTS_DIR + '/P1/lib/mod1')。この方法では、P2はP1に依存します。

  • Mod1を上位レベルのディレクトリに配置するか、NODE_PATHを使用して、P1およびP2がdoint require('mod1')で解決できるようにします。ただし、デプロイするときは、少し汚いように見えるこの上位レベルのディレクトリもデプロイする必要があります。

  • Mod1をnpmモジュールとして扱いたいので、どのプロジェクトや環境にも簡単にインストールできますが、この特定のケースでは、npmにモジュールを公開できないので、プロジェクト固有のものです。プライベートnpmリポジトリを作成してmod1を中に入れることができました。これの要点は、本番環境からもアクセスできるように設定することです。その価値はありますか?

  • これらすべてを_node_modules_にまとめてどうですか? (外部の依存関係と自分のライブラリ)。 `require( 'module')のようにモジュールが必要なだけなので、それは素晴らしいことです。しかし、それもかなり汚いようです。

  • 展開時に_npm link_がどのように機能するかわかりません。シンボリックリンクを作成します。GitまたはSVNを介してコードをコミットする場合は、このリンクはたどられません。プロダクションで_npm install_を実行すると、リンクされたモジュールもインストールされますか?

上記のどれも私を完全に満足させません。これらの1つが適切であるかどうか、または他の提案があるかどうかはわかりませんが、他のプロジェクトで簡単に再利用できるように、独自のprivateライブラリを構造化する好ましい方法はありますか?

8
jaime

使用する npm link。それはあなたが好きな場所にモジュールを置くことを可能にし、それからあなたはそれをあなたのプロジェクトに「リンク」することができます(シンボリックリンクはあなたのnode_modules /フォルダーに作成されます)、それゆえrequire('mod1')でそれを使うことができます。モジュールはnpm互換である必要があります。

詳細はこちら: https://docs.npmjs.com/cli/link

あなたの個人的な懸念について、npmはこれについて考え、privateオプションを提供します。ここを参照してください: https://docs.npmjs.com/misc/registry (「パッケージを公式のレジストリに公開したくありません。プライベートです。」)

モジュールの依存関係ごとに、package.jsonで単純に定義できます。

6