web-dev-qa-db-fra.com

NPMRC multiples registres pour la même portée

Est-il possible de contenir plusieurs registres pour la même portée? Dans ma compagnie, nous utilisons @mycompany Poche pour le registre public de NPM ainsi que dans les registres internes.

J'ai essayé de faire

@mycompany:registry=https://company.registry.com
@mycompany:registry=https://registry.npmjs.org

mais cela n'a pas fonctionné.

8
Kousha

Non tu ne peux pas. Malheureusement, npm peut gérer qu'un seul registre des pairs. Mais vous pouvez utiliser un proxy comme Verdaccio pour cela qui gère la distribution pour vous. https://verdaccio.org/docs/fr/uplinks

Je vais vous moquer d'un exemple de configuration à l'aide de Verdaccio :

Je me suis moqué d'un "registre d'entreprise" sans accès externe ( 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}

Comme vous pouvez le constater, aucune télécommande (liaison montante) configurée, elle est complètement hors ligne.

Alors je vais courir ma proposition, verdaccio ( http: // localhost: 4873 / ) qui demandent d'abord au registre de la société et si le colis n'est pas trouvé là-bas, va chercher du registre public (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}

En tant que POC (je chante @company par @babel) je cours npm install @babel/types --registry http://localhost:4873/. Le résultat est le suivant

 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

Votre gestionnaire de packages de nœud parlera (- http: // localhost: 4873 / ) et Verdaccio essaiera FO FETCH Package à partir du registre interne, le résultat est 404, dans la seconde itération cherchera le package de NPMJS, résultant en 200.

Avoir un registre de proxy rend le processus plus transparent pour votre équipe, tout est centralisé et plus efficace, IHMO.

J'espère que cela aide.

3
Juan Picado