¿puede alojar un repositorio privado para que su organización lo use con npm?

219

Npm suena como una gran plataforma para usar dentro de una organización, curioso si es posible un repositorio privado, como con Nexus / Maven. No aparece nada en Google :(

Adán
fuente
1
A continuación hay una documentación bastante ordenada, cómo hacerlo: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository Esto es lo mismo que pvorb explicó en su respuesta.
ramesh.mimit
2
Tenga en cuenta que la publicación clock.co.uk es un duplicado completo del registro npm. Para un caché local de sus dependencias requeridas, la mejor solución que he encontrado es npm_lazy . El documento en mi tenedor puede ser un poco más fácil de seguir.
Jake Berger
1
Sé que llego un poco tarde a la discusión, pero me gustaría agregar que recientemente agregamos soporte de registro privado npm a nuestro producto (gratuito) ProGet
Karl Harnagy
2
Como se indica a continuación, Nexus ahora admite repositorios npm alojados y proxy.
Zac Thompson
8
Con los años se han convertido en muchas opciones disponibles. Cualquiera que vuelva a esto debería leer todas las respuestas y no solo la que acepté en 2011.
Adam

Respuestas:

100

No creo que haya una manera fácil de hacer esto.

Un vistazo a la documentación de npm nos dice que es posible:

¿Puedo ejecutar mi propio registro privado?

¡Si!

La forma más fácil es replicar la base de datos del sofá y usar el mismo documento de diseño (o similar) para implementar las API.

Si configura la replicación continua desde el CouchDB oficial y luego configura su CouchDB interno como la configuración del registro, podrá leer los paquetes publicados, además de los privados, y por defecto solo se publicará internamente. Si luego desea publicar un paquete para que lo vea todo el mundo, simplemente puede anular la --registryconfiguración de ese comando.

También hay un excelente tutorial sobre cómo crear un repositorio privado de npm en el blog del reloj.

EDITAR (2017-02-26):

No es realmente nuevo, pero ahora hay planes pagados para alojar paquetes privados en NPM.

Con los años, NPM se ha convertido en un factor para muchas compañías que no pertenecen a Node.js, también, a través del enorme ecosistema frontend que se basa en NPM. Si su empresa ya está ejecutando Sonatype Nexus para alojar proyectos Java internamente, también puede usarlo para alojar paquetes NPM internos.

Otras opciones incluyen JFrog Artifactory e Inedo ProGet , pero no las he usado.

pvorb
fuente
201

https://github.com/isaacs/npmjs.org/ : en la versión npm v1.0.26 puede especificar URL de repositorios git privados como una dependencia en sus archivos package.json. No lo he usado, pero me encantaría recibir comentarios. Aquí está lo que tú necesitas hacer:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

La siguiente publicación habla de esto: Debuggable: módulos npm privados

ebdr
fuente
3
Esa es una gran característica, pero acepté pvorb's porque estaba preguntando acerca de organizar un repositorio de NPM completo, un repositorio interno de Maven
adam el
2
Nota: NPM actualmente no admite la especificación de un rango de versiones con estas URL de git (por ejemplo, 1.2.xo ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, puedes especificar una etiqueta (v0.0.1), ¿verdad?
mcha
Sí, puedes hacer una etiqueta exacta.
Clay
¿Hay alguna manera de usar las claves de implementación de GitHub para autenticarse en repositorios privados?
sunknudsen
91

Hay un paquete npm fácil de usar para hacer esto. https://www.npmjs.org/package/sinopia

En pocas palabras, Sinopia es un servidor de repositorio npm privado / en caché que puede configurar con configuración cero.

La sinopia se puede usar para:

  • publicar sus propios paquetes privados sin exponerlos al público
  • caché solo los paquetes públicos que se usan (no es necesario tener que replicar todo el registro público)
  • anular paquetes públicos con una versión modificada que se han producido internamente.
TiQP
fuente
13
La sinopia parece que ya no se mantiene. La última confirmación fue hace más de 8 meses a partir de hoy (7 de marzo de 2016). Se ve muy bien y funciona bien, pero tenga cuidado con la mantenibilidad.
Ray Booysen
45
Echa un vistazo a verdaccio . Es una bifurcación mantenida activamente: github.com/verdaccio/verdaccio
Rotareti
1
¿verdaccio admite una configuración "privada", donde no consultará ningún registro público?
MarkusSchaber
1
@MarkusSchaber Puede deshabilitar el proxy para otros registros. Funciona en modo fuera de línea incluso si el proxy intenta acceder a la red.
Juan Picado
1
Realmente creo que Verdaccio merece su propia respuesta hoy stackoverflow.com/a/50815174/336753 Ni siquiera noté el comentario aquí primero.
kub1x
40

Verdaccio es lo que estaba buscando y merece su propia respuesta;) Es una bifurcación de Sinopia mantenida activamente (respuesta altamente votada aquí ). Es un registro npm como un paquete npm , y se puede encontrar

aquí: https://github.com/verdaccio/verdaccio ,
aquí: https://www.verdaccio.org ,
aquí: pnpm i -g verdaccioo
aquí:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
fuente
2
¡esta! gracias -> docker run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@mwm Gracias. Se agregó la versión de Docker a la lista.
kub1x
28

El 14 de abril (2015), se introdujeron los módulos privados npm .

Cuando paga módulos privados, puede:

  • Aloja tantos paquetes privados como quieras
  • Otorgue acceso de lectura o acceso de lectura y escritura para esos paquetes a cualquier otro usuario pagado
  • Instale y use cualquier paquete al que otros usuarios pagos le hayan dado acceso de lectura
  • Colabora en cualquier paquete al que otros usuarios pagos te hayan dado acceso de escritura

Por supuesto, no es gratis, actualmente 7 $ al mes, por usuario.

Y sigue siendo un servicio bastante nuevo. Por ejemplo, falta el soporte para las cuentas de la organización (a partir de junio de 2015):

Actualmente, los paquetes privados solo están disponibles para usuarios individuales, pero pronto se ofrecerá soporte para cuentas de organizaciones. Mientras tanto, siéntase libre de crear un usuario para su organización, y podemos actualizarlo a una organización cuando el soporte esté aquí.

Entonces, aunque no es perfecto, es el oficial solución npm para mantener paquetes privados, y eso en sí mismo hace que valga la pena mencionarlo.

ACTUALIZAR

Los paquetes privados de Npm ahora están disponibles, con planes para usuarios individuales y organizaciones :

  • Número ilimitado de paquetes públicos y privados.
  • $ 7 / mes / desarrollador
  • Incluye un nombre de ámbito, basado en el nombre de la organización
  • Publicar y controlar el acceso a @ org-name / foo

(descargo de responsabilidad: ni siquiera remotamente afiliado de ninguna manera con npm, Inc. )

bardzusny
fuente
20

Gerentes de repositorio con soporte para registros privados de npm:

Abel Pastur
fuente
44
Solo las versiones pagas admiten repositorios npm; Las versiones gratuitas no.
Boon
12
La versión gratuita de Sonatype Nexus 3.0, de hecho, admite repositorios npm (junto con repositorios Bower y Docker).
n8n8baby
10

Supongo que este hilo necesita una actualización. Si observa cualquiera de los registros npm que están disponibles, son extremadamente pesados ​​y necesitan couchdb. Gemfurry y otros necesitan que salgas de repositorios públicos. Algunos de los npm como shadow-npm no tienen confirmaciones recientes .

Entonces, encontramos a Reggie . Tiene una buena actividad de confirmación, extremadamente fácil de instalar y usar y tiene un soporte comunitario bastante bueno . Es extremadamente liviano y no tiene que lidiar con couchdb, etc.

Pradeep Mahdevu
fuente
9

Perdóname si no entiendo bien tu pregunta, pero aquí está mi respuesta:

Puede crear un módulo npm privado y usar los comandos normales de npm para instalarlo. La mayoría de los usuarios de node.js usan git como su repositorio, pero usted puede usar cualquier repositorio que funcione para usted.

  1. En su proyecto, querrá el esqueleto de un paquete NPM. La mayoría de los módulos de nodo tienen repositorios git donde puede ver cómo se integran con NPM (el archivo package.json, creo que es parte de esto y el sitio web de NPM le muestra cómo hacer un paquete npm)
  2. Use algo similar a Make para hacer y tarball su paquete para que esté disponible desde Internet o su red para organizarlo para descargas de instalación de npm.
  3. Una vez que haya hecho su paquete, use

    npm install * tarball_url *

EhevuTov
fuente
55
¡No recibió su pregunta, pero la respuesta es muy útil para mí! :)
Eduardo Costa
7

Esta es la forma más fácil que conozco: alojarlo en la nube con el registro privado npm de Gemfury.

Es gratis y puede iniciar sesión con su cuenta de Github. Debería ahorrarle mucho tiempo, en comparación con la configuración de su propia base de datos.

alex urdea
fuente
No es gratis aunque.
I.Tyger
6

estamos utilizando Sonatype Nexus, la versión es Nexus Repository ManagerOSS 3.6.1-02. Y estoy seguro de que es compatible con el repositorio privado NPM y del caché del paquete.

ingrese la descripción de la imagen aquí

Xin Meng
fuente
5

Un poco tarde para la fiesta, pero NodeJS (a partir del ~ 14 de noviembre, supongo) admite repositorios corporativos de NPM: puede encontrar más información en su sitio oficial .

A simple vista, parece que npmE permite la duplicación del repositorio de NPM, es decir, buscará paquetes en el repositorio de NPM real si no puede encontrar uno en su repositorio interno. Parece muy útil!

npm Enterprise es una solución local para compartir y distribuir de manera segura módulos JavaScript dentro de su organización, del equipo que mantiene npm y el registro público npm. Está diseñado para equipos que necesitan:

Fácil intercambio interno de módulos privados. Mejor control del flujo de trabajo de desarrollo e implementación. Seguridad más estricta en torno a la implementación de módulos de código abierto. Cumplimiento de los requisitos legales para alojar código local.

npmE es un registro npm que funciona con el mismo cliente npm estándar que ya usa, pero proporciona las características que necesitan las organizaciones más grandes que ahora están adoptando con entusiasmo el nodo. Está construido por npm, Inc., el patrocinador del proyecto de código abierto npm y el anfitrión del registro público npm.

Lamentablemente, no es gratis. Puede obtener una versión de prueba, pero es un software comercial. Esto no es tan bueno para los desarrolladores en solitario, pero si eres un desarrollador en solitario, tienes GitHub :-)

Dan Pantry
fuente
3

Esta publicación habla sobre cómo configurar un registro privado

  • asegúrese de que couchdb esté instalado en su sistema
  • Replicando npmjs.org use el siguiente comando

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

Tenga "continuous":trueen cuenta que hay en el comando, esto utiliza la API _changes de CouchDB y extraerá cualquier cambio nuevo cuando se notifique esta API.

Si alguna vez desea detener estas réplicas, puede agregarlas fácilmente "cancel":true. Entonces el guión sería

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

A continuación, vaya a npmjs.org Léame para instalar NPM (asegúrese nodejsy gitestá instalado). Golpe es todos los pasos

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 
nickleefly
fuente
1
La url isaacs.iriscouch.com/registry está desafortunadamente muerta ahora. Intenté cambiarlo a skimdb.npmjs.com/registry , que parece funcionar al principio, pero está replicando solo el índice del registro y no los tarballs ...
fuzzyTew
El archivo Léame de couchapp indica que ahora está en desuso, pero también dice que la forma actual de reflejar todo el registro es usar npm-fullfat-
Registry
Terminé usando el registro estático para esto, que a diferencia de las soluciones de couchdb no requiere ninguna configuración.
fuzzyTew