自分のレジストリなしでプライベートNPMモジュールをインストールする方法は?


329

いくつかの共有コードを取り、それをNPMモジュールに入れました。中央レジストリにアップロードしたくないものです。問題は、他のプロジェクトからどのようにインストールするかです。

明白な方法はおそらく私自身のNPMレジストリをセットアップすることですが、ドキュメントによると、それは多くの面倒を伴います。

ローカルファイルシステムにあるNPMモジュールをインストールできますか、あるいはgitからでもインストールできますか?

npm install --from-git git@server:project

回答:


263
cd somedir
npm install .

または

npm install path/to/somedir

somedirそのpackage.json中に含まれている必要があります。

それはgitについても知っています:

npm install git://github.com/visionmedia/express.git

4
path / to / somedirソリューションは機能しますが、requireステートメントのすべてにその相対パスまたは絶対パスを含める必要があるため、それはひどいものになります。私は何か間違ってやっている場合は...私を修正してください
ルークベイズ

3
@ルークはい、あなたは間違っています。npm installすべてのファイルがプロジェクトディレクトリにコピーされた後。したがって、requireステートメント内のパスは、プロジェクトディレクトリにのみ相対的になります。
mihai 2012年

4
上の部分に戸惑っていますが、自分でこれをテストしなかった唯一の理由は、まだ学習中で、作業するためのプライベートモジュールがないためです。とにかく、ディレクトリをモジュールのある場所に変更してから呼び出すと、installそこにインストールするだけで、使用したいプロジェクトではないのではないでしょうか。
アダムベック

11
補足:(a)git reposを使用する場合#<ref>、git urlの末尾にa を追加することでブランチ/コミット/タグを指定できますgit://github.com/visionmedia/express.git#v0.0.1。(b)安全のため"private": trueに、プライベートリポジトリのpackage.jsonに追加します。これにより、npmが誤って秘密のソースを公式のnpmレジストリに公開してしまうことを防ぐことができます。(debuggable.com/posts/…によると)
Rafael Xavier

9
ちなみに、http経由でgitを提供している場合はnpm i git+http://all/the/things.gitgit clone http://all/the/things.git
slf

527

あなたの中のプライベートNPMモジュールの追加

"private": true 

あなたのpackage.jsonに

次に、別のモジュールでプライベートモジュールを参照するには、package.jsonでこれを使用します

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
これは、本当のあなたのpackage.jsonはあなたがやるべきことをグッド・シング(TM)である民間レポ依存リストを維持したい場合は正解。

6
この例では特定のタグを参照していますが、タグがない場合はデフォルトでマスターになります。(git-scm.com/book/en/Git-Basics-Taggingを参照)
250R

4
資格情報を提供していない場合、このコマンドラインでプライベートgithubリポジトリからコードをダウンロードする方法がわかりません。では、どうすればgithub資格情報を渡すことができますか?
Renato Gama

28
この"private": true部分は必須ではありませんが、プライベートリポジトリが誤ってパブリックnpmレジストリに公開されるのを防ぐのに役立ちます。
evanrmurphy 2014

2
npmはいくつかの環境変数も探します。手動npm install <git remote url>セクション、のようなオプションがあるGIT_ASKPASSGIT_SSH、デフォルトid_rsaと以外のキーを選択するに.Anの使用例は:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
ジャスミンヘグマン

62

ローカルファイルシステムにあるNPMパッケージをインストールできますか、あるいはgitからでもインストールできますか?

はい、できます!ドキュメントからhttps://docs.npmjs.com/cli/install

パッケージは次のとおりです。

  • a)package.jsonファイルで記述されたプログラムを含むフォルダー
  • b)(a)を含むgzipされたtarball
  • c)(b)に解決されるURL
  • d)a <name>@<version>(c)でレジストリに公開されているもの
  • e)a <name>@<tag>(d)を指すa
  • f)<name>(e)を満たす「最新」のタグを持つa
  • g)a <git remote url>は(b)に解決される

npmは見事ではありませんか?


2
オプションb)を使用する場合、実際にはgzip圧縮されたtarballである必要があることに注意してください。単なるzipアーカイブでは実行できません。つまり、tar -czf my-package.tar.gz distdistフォルダーにも適切なpackage.jsonファイルが含まれていると仮定して)でパッケージを作成した場合npm install ../my-lib/my-package.tar.gz、他のプロジェクトから作成できます。
ダニエル・キシュナジ

48

2016年1月の更新

他の回答に加えてに、チームコンテキストでプライベートモジュールを使用できるようにするシナリオがある場合があります。

GithubBitbucketはどちらも、チームAPIキーを生成するという概念をサポートしています。このAPIキーは、このチームとしてAPIリクエストを実行するためのパスワードとして使用できます。

あなたの中のプライベートNPMモジュールの追加

"private": true 

あなたのpackage.jsonに

次に、別のモジュールでプライベートモジュールを参照するには、package.jsonでこれを使用します

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

ここで、チーム名= myteamname、およびAPIキー= aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

ここではbitbucketリポジトリを参照していますが、githubを使用してもほとんど同じです。

最後に、別の方法として、(執筆時点で)1か月あたり7ドルを支払うことを本当に気にしない場合は、すぐにプライベートNPMモジュールを使用できます。


グローバルモジュールが必要な場合、これを使用できますか?
PI。

これは私にはうまくいきません。リモートとリポジトリの両方が見つかりません。何か案は?
Thomas Bormans、2016

@ThomasBormans-まだ問題がありますか?上記の指示に従って、package.jsonの依存関係セクションに、行としてあるものを貼り付けてください(チーム名/ APIキーをスクランブルしてください)。これはgithubとbitbucketのプライベートリポジトリの両方でうまく機能することがわかりました。どちらを使用していますか?
arcseldon 2016

@arcseldon "name": "git + key:x-oauth-basic@bitbucket.org/user/repo.git "EISDIRを返します:ディレクトリでの不正な操作です。そして、"name": "git + user:key@bitbucket.org/repo.git "、リモートを含むいくつかのエラーを返します:見つかりません、致命的:リポジトリ、コマンド失敗:git clone。何か案は?
Thomas Bormans、2016

「git + https:// <myteamname>:<my_key> @ bitbucket.org / <my_repo_name> .git API keyをどのように生成しましたか?もう一度確認しましたか?」それはあなたのbitbucket設定で正しいです...明白に尋ねて申し訳ありませんが、私はこれがうまくいくはずです100%に近い自信があります
arcseldon

30

FWIW:民間組織のリポジトリを扱うときに、これらすべての回答に問題がありました。

以下は私のために働きました:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

例えば:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

この1つのケースで他の回答がうまくいかなかった理由は完全にはわかりません。Googleにアクセスしてこの回答を見つける前に最初に試したものだからです。そして、他の答えは私が過去にやったことです。

うまくいけば、これは他の誰かを助けます。


2
git repoのサブフォルダーを使用できますか?
Chris

2019年に私のために働きました!しかし、私はgitがそのアカウントにアクセスするための資格情報を持っていることを確認する必要がありました。(たとえば、でgit cloneを2回テストhttps://し、2回目の実行でパスワードが不要であることを確認します。その後、
準備完了

9

私はこれと同じ問題を抱えていて、いろいろ調べてみたところ、Reggie(https://github.com/mbrevoort/node-reggie)を見つけました。それはかなり固体に見えます。NPMモジュールをプライベートサーバーに軽量に公開できます。完璧ではなく(インストール時に認証なし)、それでもまだ非常に若いですが、ローカルでテストしましたが、本来の動作を実行しているようです。

それは...(そしてこれはちょうど彼らのドキュメントから)

npm install -g reggie
reggie-server -d ~/.reggie

次に、あなたのモジュールディレクトリにcdして...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

最後に、直接npm installコマンドで、またはpackage.json内からそのURLを使用するだけで、レジーからパッケージをインストールできます...

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

または

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

7

以下のようなアクセスしやすい方法でコードを構造化します。これが可能な場合。

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

MainApp @ NodProjs \ Apps \ MainApp \内

npm install --S ../../Modules/DataModule

package.jsonを次のように更新する必要がある場合があります。

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

これは私の状況でうまくいきました。


5

Npmは、ユーザーあたり月額7ドルで無制限のプライベートホストモジュールを提供するようになりました。

cd private-project
npm login

あなたのパッケージのjsonセット "name": " @username/private-project"

npm publish

次に、プロジェクトを要求するには:

cd ../new-project
npm install --save @username/private-project

1
これにはクライアント側のログイン手順が必要ですか?
Aidan Hoolachan 2017

これに代わるものは何ですか?たとえば、S3で「パッケージ」をホストし、そこからプルしたい場合。
Con Antonakos

4

arcseldonの答えから始めて、次のようにURLにチーム名が必要であることがわかりました。

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

また、APIキーは個人ユーザーではなくチームでのみ使用できることに注意してください。


2

マシンがファイアウォール下にある場合でも、パブリックGithubリポジトリからインストールするための構成:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

私はプライベートgithubリポジトリで以下を使用します:

npm install github:mygithubuser/myproject

2

これは私が探していたものでした

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

この目的でVerdaccioを使用できます。これは、Node.jsに組み込まれた軽量のプライベートnpmプロキシレジストリです。また、無料でオープンソースです。Verdaccioを使用することで、プレーンなプライベートnpmレジストリのようにそれほど面倒な作業は必要ありません。

あなたは彼らのウェブサイトでそれをインストールして実行する方法についての詳細情報を見つけることができますが、ここにステップがあります:

必要node >=8.xです。

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

また、Dockerも備えているため、公開されているDockerに簡単に公開できます。構成すると、他の人に配布できるプライベートnpmリポジトリができます。


0

非常にシンプル-

npm config set registry https://path-to-your-registry/

それは実際にregistry = "https://path-to-your-registry"この行を設定します/Users/<ur-machine-user-name>/.npmrc

明示的に設定した、またはデフォルトで設定したすべての値は、 npm config list

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.