同じスコープに複数のレジストリを含めることは可能ですか?私の会社では、パブリックNPMレジストリと内部レジストリの両方に@mycompany
スコープを使用しています。
やってみた
@mycompany:registry=https://company.registry.com
@mycompany:registry=https://registry.npmjs.org
しかし、これは機能しませんでした。
いいえ、あなたがすることはできません。残念ながら、npm
は1つのスコープピアレジストリしか処理できません。ただし、ディストリビューションを処理するプロキシを Verdaccio として使用することもできます。 https://verdaccio.org/docs/en/uplinks
Verdaccioを使用して構成の例をモックします。
外部アクセスのない「会社のレジストリ」をモックしました( http:// localhost:5000 / )。
storage: /Users/test/.local/share/verdaccio/storage_company_registry
auth:
htpasswd:
file: ./htpasswd
packages:
'@*/*':
access: $all
publish: $authenticated
'**':
access: $all
publish: $all
middlewares:
audit:
enabled: true
logs:
- {type: stdout, format: pretty, level: http}
ご覧のとおり、リモート(アップリンク)は構成されておらず、完全にオフラインです。
次に、提案を実行します Verdaccio ( http:// localhost:4873 / )最初に会社のレジストリに問い合わせ、パッケージがそこに見つからない場合は、パブリックレジストリ(npmjs)からフェッチします。
storage: /Users/test/.local/share/verdaccio/storage_proxy
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
company:
url: https://company.registry.com
packages:
'@company/*':
access: $all
publish: $authenticated
proxy: company npmjs
'**':
access: $all
publish: $authenticated
proxy: npmjs
middlewares:
audit:
enabled: true
logs:
- {type: stdout, format: pretty, level: http}
PoCとして(@companyを@babelに切り替えています)npm install @babel/types --registry http://localhost:4873/
を実行します。結果は次のとおりです
warn --- config file - /Users/test/.config/verdaccio/config.yaml
warn --- Plugin successfully loaded: htpasswd
warn --- Plugin successfully loaded: audit
warn --- http address - http://localhost:4873/ - verdaccio/4.0.0-alpha.4
http --> 404, req: 'GET http://localhost:5000/@babel%2Ftypes' (streaming)
http --> 404, req: 'GET http://localhost:5000/@babel%2Ftypes', bytes: 0/43
http --> 200, req: 'GET https://registry.npmjs.org/@babel%2Ftypes' (streaming)
http --> 200, req: 'GET https://registry.npmjs.org/@babel%2Ftypes', bytes: 0/93375
http <-- 200, user: null(127.0.0.1), req: 'GET /@babel%2ftypes', bytes: 0/22072
http --> 200, req: 'GET https://registry.npmjs.org/esutils' (streaming)
http --> 200, req: 'GET https://registry.npmjs.org/esutils', bytes: 0/23169
http <-- 200, user: null(127.0.0.1), req: 'GET /esutils', bytes: 0/3854
http --> 200, req: 'GET https://registry.npmjs.org/to-fast-properties' (streaming)
http --> 200, req: 'GET https://registry.npmjs.org/to-fast-properties', bytes: 0/8239
http <-- 200, user: null(127.0.0.1), req: 'GET /to-fast-properties', bytes: 0/1725
http --> 200, req: 'GET https://registry.npmjs.org/lodash' (streaming)
http --> 200, req: 'GET https://registry.npmjs.org/lodash', bytes: 0/185410
http <-- 200, user: null(127.0.0.1), req: 'GET /lodash', bytes: 0/14307
http <-- 200, user: null(127.0.0.1), req: 'POST /-/npm/v1/security/audits/quick', bytes: 474/146
ノードパッケージマネージャーは( http:// localhost:4873 / )と通信し、Verdaccioは内部レジストリからパッケージをフェッチしようとします。結果は404で、2回目の反復でパッケージをフェッチします。 npmjs、結果は200になります。
プロキシレジストリを使用すると、チームのプロセスがより透過的になり、すべてが一元化され、より効率的になります。
それがお役に立てば幸いです。