es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

npm: ¿Cómo instalar repositorios npm de GitHub con claves ssh específicas?

Tengo un package.json con dos repositorios privados de GitHub. Ambos deben utilizar diferentes claves de implementación SSH. Para los repositorios de Git sin npm, esto se puede manejar con un host en .ssh/config, por ejemplo:

Host repo1.github.com
    HostName github.com
    IdentityFile ~/.ssh/repo1

Host repo2.github.com
    HostName github.com
    IdentityFile ~/.ssh/repo2

Luego, en el .git/config de repo1, tendría lo siguiente:

[remote "origin"]
    url = git@repo1.github.com:org/repo1.git

Ahora, pensé que podría usar el mismo truco para las dependencias de npm:

npm install "git+ssh://git@repo1.github.com/org/repo1.git#commit-hash" --save

Desafortunadamente, esto me dará como resultado:

npm ERR! code EUNSUPPORTEDPROTOCOL
npm ERR! Unsupported URL Type "ssh:": ssh://git@repo1.github.com/org/repo1.git#commit-hash

Si uso en su lugar y la clave SSH correcta está cargada:

npm install "git+ssh://git@github.com/org/repo1.git#commit-hash" --save

Entonces funciona como se espera. Sin embargo, esta no es una solución ya que quiero poder ejecutar npm install y luego que utilice dos claves diferentes.

¿Cómo se puede resolver esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, necesitas usar el paquete npm ssh-config.

    Primero, debes instalarlo de forma global:

    npm install -g ssh-config

    Luego, crea un archivo de configuración SSH llamado config en tu directorio principal (si aún no existe) y añade lo siguiente:

    Host repo1.github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/repo1
    
    Host repo2.github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/repo2
    

    Después, en tu archivo package.json, cambia las URLs de tus repositorios de git para utilizar los nombres de host personalizados:

    "dependencies": {
      "my-private-dependency": "git+ssh://repo1.github.com/org/repo1.git#commit-hash",
      "my-other-private-dependency": "git+ssh://repo2.github.com/org/repo2.git#commit-hash"
    }
    

    Por último, ejecuta npm install y ahora utilizará las claves de despliegue SSH correctas para cada repositorio privado.

Comments are closed.