これが私の問題です。VPNでのみ機能するプライベートNPMレジストリがあります。VPNから出たときにシームレスに機能するように、フォールバックレジストリhttps://registry.npmjs.orgを用意したいと考えています。
PS現在、私は使用していますnpmrc回避策として.npmrcファイルを切り替えるには良い仕事をして
これが私の問題です。VPNでのみ機能するプライベートNPMレジストリがあります。VPNから出たときにシームレスに機能するように、フォールバックレジストリhttps://registry.npmjs.orgを用意したいと考えています。
PS現在、私は使用していますnpmrc回避策として.npmrcファイルを切り替えるには良い仕事をして
回答:
ファイル内のスコープパッケージには、複数のレジストリを含めることができ.npmrc
ます。例えば:
@polymer:registry=<url register A>
registry=http://localhost:4873/
@polymer
スコープ内のパッケージはhttps://registry.npmjs.orgから受信されますが、残りはローカルNPMから受信されます。
バージョン4.4.1では、パッケージ名を変更できる場合は、以下を使用します。
npm config set @myco:registry http://reg.example.com
@myco
パッケージのスコープはどこですか。
この方法でパッケージをインストールできます:
npm install @myco/my-package
Invalid package name "@npmjs/": name can only contain URL-friendly characters
走るとき私は得ていますnpm i
認証のソリューションも探している人のために、.npmrc
ファイルに複数の行を含めることができるスコープパッケージソリューションを追加します。
//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy
各行は異なるNPMレジストリを表します
npm login --registry=npm.example.com
ます。ログイン資格情報(authTokens)はユーザーフォルダーの.npmrcファイルに保存されるため、ソースコード(docs.npmjs.com/cli/adduser)に含める必要はありません
registry.npmjs.org
。これは私にとって
最善の方法ではありませんが、WindowsでもMacまたはLinuxを使用している場合は、異なるレジストリにエイリアスを設定できます。
##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'
alias npm-sin=npm --registry https://localhost:4873/
(npmだけを使用して)数年前にこれを実行することは不可能に思われるため、この問題の解決策は(Sonatypeの)Nexus Repository Managerを使用することです。Nexusは複数のリポジトリをサポートしており、それらを注文したり、プロキシ/キャッシュを使用して速度を向上させたりできます。
無料版と有料版があります。これをサポートする機能については、https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registriesで説明されています 。
関連情報は以下に複製されているため、上記のURL /リンクが機能しなくなった場合でも、情報はまだここにあります。
リポジトリグループは、追加のクライアント側の構成を必要とせずに、リポジトリマネージャーからユーザーにすべてのnpmレジストリリポジトリを公開するための推奨される方法です。リポジトリグループを使用すると、1つのURLで複数のプロキシおよびホストされたリポジトリの集約コンテンツをnpmおよびその他のツールに公開できます。
プライベートnpmレジストリを作成できます
プライベートnpmレジストリを使用して、独自のパッケージやサードパーティのパッケージをアップロードできます。
そして
重複ダウンロードを減らし、開発者とCIサーバーのダウンロード速度を改善するには、https://registry.npmjs.orgでホストされているレジストリをプロキシする必要があります。デフォルトでは、npmはこのレジストリに直接アクセスします。必要な他のレジストリをプロキシすることもできます。
したがって、これを機能させるために行うことの簡単な箇条書きは次のとおりです。
Nexusをインストールする
ローカル/プライベートリポジトリを作成する(または別のサーバー上のプライベートリポジトリをポイントする)
プライベートリポジトリとパブリックリポジトリをリストするGROUPを作成します。
作成した「グループ」を指すように$ HOME / .npmrcファイルを構成します。
プライベートnpmパッケージをローカルリポジトリに公開します。
これで、ユーザーは1回限りのセットアップを実行できます。
npm config set registry https://nexus/content/groups/GROUP
npm install
。
npm install my-private-package
npm install lodash any-other-public-package
また、パブリックパッケージとプライベートパッケージの両方を簡単なnpm install
コマンドでインストールできます。Nexusは、グループで構成された各リポジトリを検索するパッケージを見つけ、結果を返します。したがって、npmはまだレジストリは1つしかないと考えていますが、カーテンの後ろには複数のリポジトリが使用されています。
重要な注意:コンポーネントを公開するときは、npm publish --registry https://nexus/content/repositories/private-repo my-private-package
コマンドを指定して、パッケージが正しいリポジトリに公開されるようにする必要があります。
npm-private
代わりにnpm-group
)、プロジェクトののregistry
-keyをオーバーライドできますpackage.json
(詳細はhttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
を参照)。使用してnpm config set registry <url>
、あなたは、例えばに設定することができますnpm-group
含まれ、npm-registry
(転送リポジトリ)とnpm-private
(自分のリポジトリ)。ローカルのGitLab CEからアーティファクトを取得するのは複雑すぎるため、このソリューションを使用しました。
ファイルのregistry
エントリには、複数のリポジトリ構文を使用でき.npmrc
ます。
registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/
それはあなたのnpmが異なるサーバーのパッケージを探すようにするでしょう。
serverA
、serverB
そしてserverC
例のリポジトリは、社内ネットワーク、あなたのために文句を言わない仕事からすべてです。自分に適しているかどうかはわかりませんが、適切だと思われる場合は、Nexus Repository Managerを内部リポジトリに展開してみてください。
試すことができるいくつかの手順。(職場でのやり方)
お役に立てば幸いです。
私は、Strongloopのcliツールを使用しています。詳細については、https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/を参照してください
リポジトリ間の切り替えは次のように簡単です: slc registry use <name>
会社が独自のレジストリを設定したときにも同じ問題が発生するため、この問題を解決するために、proxy-registryをproxy-multi-registriesに大幅に変更しました。それがあなたにも役立つことを願っています。
2020年4月13日現在、別のスコープを使用できない限り、そのような機能はありませんが、回避策としてpostinstallスクリプトを使用できます。npmがインストールされるたびに、常に実行されます。
プライベートgithubリポジトリから@ foo-org / foo-pack-privateをインストールするように.npmrcを構成しているが、@ foo-org / foo-pack-publicパブリックパッケージがnpmにある(同じスコープ:foo- org)。
あなたのインストール後は、次のようになります。
"scripts": {
...
"postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}
削除することを忘れないでくださいFOO-パック/ @ fooの-組織からの依存関係の配列を確認しますインストールNPMを試してみて、githubのからそれを取得し、追加することはありません--dryランを確実にするフラグpackage.jsonとパッケージ-をnpmのインストール後、lock.jsonは変更されません。
私のアプローチは、レジストリスイッチを追加するわずかなコマンドラインバリアントを作成することでした。
これらのファイルは、npm実行可能ファイルがあるnodejsフォルダーに作成しました。
npm-.cmd
:
@ECHO OFF
npm --registry https://registry.npmjs.org %*
npm-
:
#!/bin/sh
"npm" --registry https://registry.npmjs.org "$@"
ここで、通常のnpmレジストリに対して操作を実行する場合(VPNに接続していないとき)、npm-
通常はと入力する場所に入力しnpm
ます。
このコマンドをテストしてパッケージのレジストリを表示するには、次の例を使用します。
npm- view lodash
PS。私はWindowsを使用しており、これをBash、CMD、Powershellでテストしました。私も