web-dev-qa-db-ja.com

パブリックリポジトリを複製せずにプライベートnpmリポジトリを実行できますか?

Node.jsを使用して多数のコード(内部使用向け)を記述しており、モジュール(npm用にパッケージ化された)を、パッケージがインストールされるさまざまなマシンへの各ディストリビューションのパッケージリポジトリに格納したいと考えています。

理想的には、Debianのaptリポジトリに似たソリューションを希望します。プライベートリポジトリサーバーを実行し、npmを設定して、そこからインストールするリポジトリのリストを使用できます( "foo"をインストールするとき、 "foo"がプライベートで知られている場合)サーバーはそこからインストールします。それ以外の場合はパブリックサーバーからインストールします)。

ただし、npm registry構成キーは単一のURLのみを受け入れるようです。

私が望むものを達成する方法はありますか?

私が見つけることができた最も近いものは次のとおりです:

  • パブリックリポジトリをローカルにミラーリングし、その上にパッケージを追加します...しかし、その量のデータ(2.5Gであり、ダウンロード中)をAWSにレプリケートしたままにしておきたくありません。
  • すべてのパッケージをgitリポジトリでホストし、そこからインストールします(これは面倒です)。
  • HTTPで静的パッケージをホストする(私の知る限り、これにより自動的に「最新バージョン」を取得できなくなります。シンボリックリンクで何かを実行できると思いますが、それでもgitよりも柔軟性が低く、完全なURLが必要です(必要な最新の状態に保つため)、検索可能なリポジトリは提供されません。
36
Quentin

私は自分の仕事のためにこれを設定しました。これが私がしたことです:

  1. 空のNPMレジストリをセットアップします:npmjs.orgのこのフォークからの指示に従いました 改善されたドキュメント を追加します。

  2. セットアップカッパ:Paypalの優れたnpmプロキシ カッパ を使用しました。 (私は彼らがプライベートリポジトリを望んでいるほとんどの人と非常に似たユースケースを持っていると思います;これはまさに私が望んでいたものでした)。

  3. Setup npm_lazyoptional):npmjs.orgの場合に頻繁に使用されるパッケージのニースキャッシュが必要でしたダウンしたので、キャッシュレイヤーとして、全体の前に npm_lazy を追加しました。

すべてが稼働するまで2日かかりました。補足として、偶然に公開レジストリにプッシュする人々が心配な場合は、これをpackage.jsonに追加することをお勧めします。

"publishConfig": { "registry": "http://my-registry.example.com" },

これはほんの少しのパラノイアです。 Kappa/npm_lazyインスタンスを指すようにnpmを設定すると、Kappaがプライベートリポジトリへの公開を処理します。

注:Kappaは、構成内の最初のリポジトリにすべてのパブリッシュのみを行います。プライベートレジストリとパブリックの両方に公開する必要がある場合は、独自のソリューションを作成する必要があります。

33
Chris Case

Package.jsonでは、有効なnpmパックモジュールを指す任意のURLを使用できます。推測が難しいバケット名のs3を使用しています。

npm pack
s3cmd put *.tgz s3://path-to-your bucket

S3は単なる例であり、Webサーバーにファイルを配置できる任意の手段を使用できます。基本認証を介して保護することもできます。

6

Paypalの Kappa プロジェクトはあなたのニーズに合うと思います。

記事はこちら PaypalのKrakenプロジェクトと、Kappaの位置付けについて説明しています。

クエンティンの質問の時にそれが利用できなかったと私は理解していますが、これはおそらくここに来る他の人にとって有用でしょう。

3
user605331

npm-registry-client GitHub issue#42に、独自のリポジトリミラーを作成する方法がいくつかリストされています。つまり:

全体として、 https://github.com/npm が所有するリポジトリの問題を検索するか、そこで質問することで、最良の回答を得ることができるようです

3
xmojmr

NodeUp (#37?)の最近のエピソードを聞いただけに基づいて、 irisnpm を確認することをお勧めします。私が覚えていることから、それはパブリックモジュールと独自のプライベートモジュールのマージされたセットを提供するサービスです。

1
David Weldon

ドミニクバーンズが示唆したように、複製できるのは_designドキュメント(CouchDBテーブルスキーム)

設計ドキュメントのみを複製する方法は?

ただし、データが必要かどうかを確認する必要があります。

0
Paul Verest

必要なモジュールを複製してから、複製でモジュールを探すプロキシサーバーを作成できます。モジュールが存在しない場合は、リクエストをNPMにパイプして、そこから結果を返すことができます。

0
pvorb