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


8

状況は次のとおりです。

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

P1では、2つの単純なモジュール、mod1とmod2の開発が必要でしたP1/lib。これらはに保存されています。このモジュールの解決はそれぞれ、外部の依存関係をで見つけます 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つが適切かどうか、または他の提案があるかどうかはわかりませんが、他のプロジェクトで簡単に再利用できるように、独自のプライベートライブラリを構築するための好ましい方法はありますか?

回答:


6

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

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

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

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


Florianに感謝します。svnまたはgitを介して変更をコミットすると、シンボリックリンクをたどることができません。npm link本番環境でも使用しなければならないということですか?または、npm installそれはpackage.jsonでそれを指定する任意の方法で暗黙的ですか?
jaime 2013年

@jaime gitとsvnはシンボリックリンクをたどります。
Florian Margaine、2013年

本番環境では、node_modules /フォルダーにモジュールをパッケージ化するスクリプトを実行します。
Florian Margaine 2013年

@jaime npm link開発時にのみ使用する必要があります。
Daniel

docs.npmjs.com/…-404。しかし、物事をプライベートに保つための本当に最良の方法は、それらをインターネット上に置かないことです。npmjs.org/doc/link.html 404 を除いて、リンクも最適なオプションのようです。リンク腐敗が好きになりました。
Pat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.