Usando Git para Distribuir paquetes NPM”Privados”

Y comparte código con tu equipo interno.

Esta es una receta para usar git y npm para distribuir su codigo con equipos internos.

Se debe conocer acerca de Git, Tags, NPM y sus archivos de configuración.

Contenido

    Contexto

    NPM ayuda a distribuir y compartir codigo entre desarrolladores, usualmente la forma de compartir codigo es creando un package.json y con npm publish se puede facilmente compartir codigo con el mundo, pero que pasa en caso de querer compartir el código solo con un pequeño grupo de personas? en mi poca experiencia hay dos formas de hacerlo.

    1. Utilizando ‘scope packages’ o
    2. Utilizando Git con tags

    Para la solución 1, tiene que pagar por el servicio y se puede documentar acercar del servicio en https://docs.npmjs.com/creating-and-publishing-private-packages

    Como alternativa se puede utilizar un repositorio Git sin importar su ubicación (Github, bitbucket, su propio servidor, etc) y usando NPM se puede distribuir el codigo. En este caso solo personas con el acceso al repositorio puede instalar y actualizar el paquete.

    La implementación que vamos a revisar, es acerca de esta segunda.

    Implementación

    Configurar el Repositorio Git

    No hay nada de especial en este paso, solo se necesita crear un repositorio de Git en el lugar que considere adecuado ejemplo Githb, Bitbucket, etc, pero el concepto principal aqui, es la seguridad, recuerde que si una persona tiene acceso al repo, esa persona podra instalar el paquete.

    Crear un package.json

    Es realmente facil crear un package.json, el archivo se puede crear manualmente con la estructura correspondiente o aun mas facil, simplemente ejecutando el siguiente comando

    > npm init

    Será guiado paso a paso con preguntas tales como el nombre del proyecto, el punto de entrada, etc.

    Acerca del Versionamiento del Paquete

    Una vez tenga el package.json y revise el contenido, notará que hay un attributo particular llamado “version”, esta versión tiene que seguir el formato semver y luce como 1.0.0, puede obtener mas información en https://semver.org/

    Esta “version” es realmente importante porque es un estandar y sus clientes (equipos internos usando su paquete en otros proyectos) podran definir que actualizaciones desean incluir.

    Por ejemplo, Es comun que un cliente quiera incluir un version mayor especifica (digamos la 1.2) con todos los cambios menores (es decir 1.2.0 , 1.2.1 etc), en este caso particular el cliente referenciará su paquete con el siguiente patron semver^1.2 y en teoria si el paquete respeta la filosofia semver, su cliente no tendra problemas ejecutando npm update porque el paquete va a ser retrocompatible. puede obtener mas detalles en https://docs.npmjs.com/about-semantic-versioning

    Creando Git tags

    Con Git tags (o branches) puede indicar que commits se relacionan con una versión especifica de su paquete, si en package.json tiene la version 1.0.0, debe crear un tag con este mismo numero versión. Se puede encontrar mas documentación acerca de las Git tags en el siguiente enlace https://git-scm.com/book/en/v2/Git-Basics-Tagging

    Probar el paquete

    Como ejercicio vamos a crear un proyecto de prueba usando la app cowsay, usualmente basta con ejecutar el comando node install cowsay, pero por cuestiones practicas vamos a realizar la instalación desde el repositorio de Github

    Cowsay imprimará una vaca con el texto que se le indique.

    Iniciar el proyecto

    1. Crear una carpeta llamada test
    2. Ejecutar npm init y aceptar todas las opciones por defecto
    3. NPM ha creado un archivo package.json con el siguiente contenido
    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }

    Instalar Cowsay desde el repositorio

    El repositorio de Cowsay se encuentra ubicado en https://github.com/piuccio/cowsay y las tags actuales al momento de escribir esta receta son

    Supongamos que para nuestro proyecto solo queremo trabajar con la version 1.2 y todos los pequeños arreglos que le realicen, eso quiere decir que nuestra expresion de semver deberia ser 1.2.x, asi NPM instalará v1.2.1 y en caso de futuros arreglos reportados en el repositorio y nostros ejecutando el comando npm update, el sistema tomará todos esos cambios (como 1.2.3, 1.2.4, 1.2.5 y asi sucesivamente).

    para lograr el objetivo previo, necesitamos ejecutar el siguiente comando

    ShellScript
    > npm install https://github.com/piuccio/cowsay#semver:1.2.x

    Ahora podemos revisar el package.json y veremos las siguientes lineas

    JavaScript
    "dependencies": {
      "cowsay": "github:piuccio/cowsay#semver:1.2.x"
    }

    Y para el caso de package.lock.json el cual es un archivo que registra la version especifica instalada, veremos las siguientes lineas relacionadas con la app Cowsay

    JavaScript
    "node_modules/cowsay": {
        "version": "1.2.1",
        "resolved": git+ssh://git@github.com/piuccio/cowsay.git#e3ecdc5e07558afc33a2f17ff8cc450fc306af4f",
        "license": "MIT",
        "dependencies": {
          "get-stdin": "^5.0.1",
          "optimist": "~0.6.1",
          "string-width": "~2.1.1"
    }

    Como se puede ver la version mas reciente que aplica el patron 1.2.x es la actualmente instalada version 1.2.1.

    Usando Cowsay

    Desde una terminal en la raiz del proyecto, ejecuta el siguiente comando

    ShellScript
    > npx cowsay hello

    y obtendrá

    Commentarios

    Leave a Reply

    Your email address will not be published. Required fields are marked *