¿Cómo instalar un módulo NPM privado sin mi propio registro?

329

Tomé un código compartido y lo puse en un módulo NPM, uno que no quiero cargar en el registro central. La pregunta es, ¿cómo lo instalo desde otros proyectos?

La forma obvia es probablemente configurar mi propio registro NPM, pero de acuerdo con la documentación, eso implica muchas molestias.

¿Puedo instalar un módulo NPM que se encuentra en el sistema de archivos local, o tal vez incluso desde git?

npm install --from-git git@server:project
futlib
fuente

Respuestas:

263
cd somedir
npm install .

o

npm install path/to/somedir

somedirdebe contener el package.jsoninterior

También sabe sobre git:

npm install git://github.com/visionmedia/express.git
mihai
fuente
44
La solución ruta / a / somedir funciona, pero es horrible porque todas las declaraciones obligatorias deben incluir esa ruta relativa o absoluta. Por favor corrígeme si estoy haciendo algo mal ...
Luke Bayes
3
@Luke sí, te equivocas. Después de que npm installtodos los archivos se copien en el directorio de su proyecto. Por lo tanto, las rutas en las requiredeclaraciones serán relativas solo al directorio de su proyecto.
Mihai
44
Estoy confundido por la parte superior y la única razón por la que no lo he probado es que todavía estoy aprendiendo y no tengo un módulo privado para trabajar. De todos modos, al cambiar su directorio a donde está el módulo y luego llamar, install¿no se instalaría allí y no para el proyecto para el que desea usarlo?
Adam Beck
11
Nota al margen: (a) cuando use repositorios git, puede especificar una rama / confirmación / etiqueta agregando un #<ref>al final de la url git, por ejemplo git://github.com/visionmedia/express.git#v0.0.1; (b) Para estar seguro, agregue "private": trueal paquete.json de sus repositorios privados. Esto asegurará que npm nunca le permita publicar accidentalmente su salsa secreta en el registro oficial de npm. (de acuerdo con debuggable.com/posts/… )
Rafael Xavier
99
Para su información, si está sirviendo su git a través de http, tendrá que hacerlo npm i git+http://all/the/things.gitaunque git clone http://all/the/things.gitfuncione bien
hasta
527

En sus módulos privados npm agregue

"private": true 

a su package.json

Luego, para hacer referencia al módulo privado en otro módulo, use esto en su package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
250R
fuente
59
Esta es la verdadera respuesta correcta si desea que su package.json mantenga la lista de dependencia de repositorio privada, que es una buena cosa (tm) que debería estar haciendo.
66
En el ejemplo, se hace referencia a una etiqueta específica, pero si no tiene una, se configurará de forma predeterminada como master. (ver git-scm.com/book/en/Git-Basics-Tagging )
250R
44
¡No entiendo cómo esta línea de comando puede descargar código de un repositorio privado de Github si no estoy proporcionando mis credenciales! Entonces, ¿cómo puedo pasar mis credenciales de Github?
Renato Gama
28
Tenga en cuenta que la "private": trueparte no es necesaria, pero ayudará a evitar que su repositorio privado se publique accidentalmente en el registro público de npm.
evanrmurphy
2
npm también busca varias variables de entorno. Del manual en la npm install <git remote url>sección, hay opciones como GIT_ASKPASSy GIT_SSH.Un ejemplo de uso para elegir una clave que no sea la id_rsa predeterminada:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
Jasmine Hegman
62

¿Puedo instalar un paquete NPM que se encuentra en el sistema de archivos local, o tal vez incluso desde git?

¡Sí tu puedes! De los documentos https://docs.npmjs.com/cli/install

Un paquete es:

  • a) una carpeta que contiene un programa descrito por un archivo package.json
  • b) un tarball comprimido que contiene (a)
  • c) una url que se resuelve en (b)
  • d) un <name>@<version>que se publica en el registro con (c)
  • e) a <name>@<tag>que apunta a (d)
  • f) un <name>que tiene una etiqueta "más reciente" satisfactoria (e)
  • g) a <git remote url>que resuelve (b)

¿No es brillante npm?

Coronel Panic
fuente
2
Tenga en cuenta que si elige la opción b), en realidad tiene que ser un tarball comprimido , un simple archivo zip no lo hará. Es decir, si crea su paquete con tar -czf my-package.tar.gz dist(suponiendo que su distcarpeta también tenga un package.jsonarchivo adecuado ), puede hacerlo npm install ../my-lib/my-package.tar.gzdesde su otro proyecto.
Dániel Kis-Nagy
48

Actualización enero 2016

Además de otras respuestas , a veces existe el escenario en el que desea tener módulos privados disponibles en un contexto de equipo.

Tanto Github como Bitbucket admiten el concepto de generar una clave API de equipo . Esta clave API se puede usar como contraseña para realizar solicitudes API como este equipo.

En sus módulos privados npm agregue

"private": true 

a su package.json

Luego, para hacer referencia al módulo privado en otro módulo, use esto en su package.json

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

donde nombre del equipo = myteamname y API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Aquí hago referencia a un repositorio de bitbucket, pero también es casi idéntico usando github.

Finalmente, como alternativa, si realmente no le importa pagar $ 7 por mes (al momento de la escritura), ahora puede tener módulos NPM privados listos para usar .

arcseldon
fuente
¿Puedes usar esto si quieres tener un módulo global?
PI.
Esto no me funciona, me temo. Tanto el control remoto como el repositorio no se encuentran. ¿Algunas ideas?
Thomas Bormans
@ThomasBormans: ¿sigues teniendo problemas? Pegue (codifique su nombre de equipo / clave de API) lo que tiene como línea en la sección de dependencias de su package.json, según las instrucciones anteriores. He encontrado que esto funciona bien para los repositorios privados de github y bitbucket. Que estas usando
arcseldon
@arcseldon "name": "git + key: [email protected]/user/repo.git " devuelve EISDIR: operación ilegal en un directorio, lea . Y "nombre": "git + usuario: [email protected]/repo.git " devuelve varios errores, incluidas estas palabras remoto: No encontrado, fatal: repositorio, Error de comando: clon git . ¿Algunas ideas?
Thomas Bormans
Intente seguir el formato "exacto" que he dado en respuesta: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git ¿Cómo generó la clave API? ¿Ha verificado dos veces? si ésta es correcta en la configuración de bitbucket ... lo siento a preguntar lo obvio, pero tengo cerca de 100% de confianza que esto debería funcionar.
arcseldon
30

FWIW: Tuve problemas con todas estas respuestas al tratar con el repositorio de una organización privada.

Lo siguiente funcionó para mí:

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Por ejemplo:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

No estoy completamente seguro de por qué las otras respuestas no funcionaron para mí en este caso, porque son lo que probé primero antes de llegar a Google y encontrar esta respuesta. Y las otras respuestas son lo que he hecho en el pasado.

Esperemos que esto ayude a alguien más.

Ben Lesh
fuente
2
¿Puedes usar una subcarpeta del repositorio de git?
Chris
¡Trabajó para mí en 2019! Pero tenía que asegurarme de que git tuviera credenciales para acceder a esa cuenta. (Por ejemplo, pruebe git clone dos veces con https://, y asegúrese de que no se necesita la contraseña en la segunda ejecución. ¡Entonces está listo!)
joeytwiddle
9

Tuve el mismo problema, y ​​después de buscar, encontré a Reggie ( https://github.com/mbrevoort/node-reggie ). Se ve bastante sólido. Permite la publicación ligera de módulos NPM en servidores privados. No es perfecto (sin autenticación después de la instalación), y todavía es muy joven, pero lo probé localmente y parece hacer lo que dice que debería hacer.

Eso es ... (y esto solo de sus documentos)

npm install -g reggie
reggie-server -d ~/.reggie

luego cd en el directorio de tu módulo y ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

finalmente, puede instalar paquetes de reggie simplemente usando esa url ya sea en un comando de instalación npm directo o desde un paquete.json ... así

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

o..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}
bwest87
fuente
7

Estructura tu código de manera accesible como a continuación. Si esto es posible para ti.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

Dentro de MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Es posible que deba actualizar package.json como:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Esto funcionó para mi situación.

Dynamiclynk
fuente
5

Npm ahora proporciona módulos alojados privados ilimitados por $ 7 / usuario / mes utilizado de esta manera

cd private-project
npm login

en su paquete conjunto json "name": " @username/private-project"

npm publish

luego para requerir su proyecto:

cd ../new-project
npm install --save @username/private-project
roo2
fuente
1
¿Requiere esto un paso de inicio de sesión del lado del cliente?
Aidan Hoolachan
¿Qué es una alternativa a esto? Por ejemplo, si desea alojar su "paquete" en S3 y extraer desde allí.
Con Antonakos
4

Comenzando con la respuesta de arcseldon , descubrí que el nombre del equipo era necesario en la URL de la siguiente manera:

npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"

Y tenga en cuenta que la clave API solo está disponible para el equipo, no para usuarios individuales.

Kramer
fuente
2

Configuración para instalar desde el repositorio público de Github, incluso si la máquina está bajo firewall:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}
Alex Belozerov
fuente
2

Utilizo lo siguiente con un repositorio privado de github:

npm install github:mygithubuser/myproject
Lars
fuente
2

Esto era lo que estaba buscando :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://[email protected]/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev
Isaias
fuente
2

Puede usar Verdaccio para este propósito, que es un ligero registro privado de proxy npm integrado en Node.js. También es gratuito y de código abierto. Al usar Verdaccio no implica tanta molestia como lo haría un registro npm privado simple.

Puede encontrar información detallada sobre cómo instalarlo y ejecutarlo en su sitio web, pero estos son los pasos:

Se requiere node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

También tiene una ventana acoplable, por lo que puede publicarla fácilmente en su ventana acoplable disponible públicamente y, ¡listo!

Dominik
fuente
0

Muy simple -

npm config set registry https://path-to-your-registry/

De hecho, establece registry = "https://path-to-your-registry"esta línea en/Users/<ur-machine-user-name>/.npmrc

Todo el valor que ha establecido explícitamente o se ha establecido de forma predeterminada se puede ver por: npm config list

sapy
fuente