Aquí está mi problema. Tenemos un registro privado de NPM que solo funciona en VPN. Me gustaría tener un registro de respaldo https://registry.npmjs.org para que cuando esté fuera de VPN funcione sin problemas.
PD Actualmente estoy usando npmrc que hace un buen trabajo al cambiar entre archivos .npmrc como solución alternativa
Respuestas:
Puede tener múltiples registros para paquetes con alcance en su
.npmrc
archivo. Por ejemplo:Los paquetes bajo
@polymer
alcance se recibirán de https://registry.npmjs.org , pero el resto se recibirá de su NPM local.fuente
En la versión 4.4.1, si puede cambiar el nombre del paquete, use:
¿Dónde
@myco
está el alcance de su paquete?Puede instalar el paquete de esta manera:
Para más información: https://docs.npmjs.com/misc/scope
fuente
Invalid package name "@npmjs/": name can only contain URL-friendly characters
npm i
Para cualquiera que busque también una solución para la autenticación, agregaría en la solución de paquetes con alcance que puede tener varias líneas en su
.npmrc
archivo:Cada línea representa un registro NPM diferente
fuente
npm login --registry=npm.example.com
. Almacenará las credenciales de inicio de sesión (authTokens) en el archivo .npmrc en su carpeta de usuario, por lo que no necesita tenerlo en el código fuente ( docs.npmjs.com/cli/adduser )registry.npmjs.org
, esto funcionó para míNo es la mejor manera, pero si está utilizando Mac o Linux, incluso en Windows, puede establecer un alias para diferentes registros.
fuente
alias npm-sin=npm --registry https://localhost:4873/
Como han pasado un par de años y no parece posible hacer esto (usando npm solo), una solución a este problema es usar el Administrador de repositorio Nexus (de Sonatype). Nexus admite múltiples repositorios, le permite ordenarlos y también servidores proxy / cachés para mejorar la velocidad.
Existe una versión gratuita y una versión pro / de pago. La característica que admite esto se describe en: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries
La información relevante se duplica a continuación, de modo que si / cuando la URL / enlace anterior deja de funcionar, la información todavía está aquí.
Te permite crear registros privados de npm
Y
Entonces, una lista rápida con viñetas de las cosas que debe hacer para que esto funcione es:
Instalar Nexus
Cree un repositorio local / privado (o señale su repositorio privado en otro servidor)
Cree un GRUPO que enumere su repositorio privado y el repositorio público.
Configure su archivo $ HOME / .npmrc para que apunte al "GRUPO" que acaba de crear.
Publique sus paquetes privados de npm en el repositorio local.
Los usuarios ahora pueden ejecutar una configuración única.
npm config set registry https://nexus/content/groups/GROUP
npm install
.npm install my-private-package npm install lodash any-other-public-package
Y tanto sus paquetes públicos como privados pueden instalarse mediante un simple
npm install
comando. Nexus encuentra el paquete buscando cada repositorio configurado en el grupo y devuelve los resultados. Entonces, npm todavía piensa que solo hay un registro, pero detrás de la cortina hay varios repositorios que se utilizan.NOTA IMPORTANTE: Cuando publique sus componentes, deberá especificar el
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
comando para que su paquete se publique en el repositorio correcto.fuente
npm-private
lugar denpm-group
), puede anular laregistry
tecla en elpackage.json
proyecto (consultehttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
para más detalles). Si lo usanpm config set registry <url>
, puede establecerlo en pnpm-group
. Ej. , Que contienenpm-registry
(depósito de reenvío) ynpm-private
(su propio depósito). Usé esta solución, porque quitar los artefactos de GitLab CE local era demasiado complicado.Puede usar la sintaxis de múltiples repositorios para la
registry
entrada en su.npmrc
archivo:Eso haría que su npm busque paquetes en diferentes servidores.
fuente
serverA
,serverB
yserverC
repositorios de ejemplo son todos de nuestra red interna, no funcionará para usted. No sé si es adecuado para usted, pero si lo cree, puede intentar implementar un Nexus Repository Manager para los repositorios internos.Algunos pasos que puedes probar. (es cómo lo hacemos en mi lugar de trabajo)
Espero que ayude.
fuente
Yo uso las herramientas cli de Strongloop para eso; ver https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ para más información
Cambiar entre repositorios es tan fácil como:
slc registry use <name>
fuente
Me encuentro con el mismo problema cuando mi empresa creó su propio registro, por lo que en gran medida la modificación relativa a proxy-registro en el proxy de-multi-registros para resolver este problema. Espero que también te ayude.
fuente
A partir del 13 de abril de 2020, no existe tal funcionalidad a menos que pueda usar diferentes ámbitos, pero puede usar el script posterior a la instalación como solución alternativa. Siempre se ejecuta, bueno , después de cada instalación de npm :
Supongamos que tiene su .npmrc configurado para instalar @ foo-org / foo-pack-private desde su repositorio privado de github, pero el paquete público @ foo-org / foo-pack-public está en npm (bajo el mismo alcance: foo- org ).
Su postinstall podría verse así:
No olvide eliminar @ foo-pack / foo-org de la matriz de dependencias para asegurarse de que npm install no intente obtenerlo de github y agregar el indicador --dry-run que asegura que package.json y package- lock.json permanece sin cambios después de la instalación de npm .
fuente
Mi enfoque fue hacer una ligera variante de línea de comando que agregue el interruptor de registro.
Creé estos archivos en la carpeta nodejs donde se encuentra el ejecutable npm:
npm-.cmd
:npm-
:Ahora, si quiero hacer una operación contra el registro npm normal (mientras no estoy conectado a la VPN), simplemente escribo
npm-
donde normalmente escribiríanpm
.Para probar este comando y ver el registro de un paquete, use este ejemplo:
PD. Estoy en Windows y he probado esto en Bash, CMD y Powershell. Yo también
fuente