Skip to content

Node App | [1] Manejo de dependencias

Benjamín Domínguez edited this page Oct 16, 2020 · 1 revision

Tema: Node App - Manejos de dependencias 📚

Versión: 1.1

Por Ian Basly (igbasly@uc.cl) | Benjamín Domínguez (bidominguez@uc.cl)

Video

La cápsula contempla un video con explicaciones y ejemplos, disponible en este enlace

Código de ejemplo

El código de ejemplo se encuentra en la dirección Material/carrito de este repositorio. Este es el enlace al último commit del video

Manejo de Versiones de NodeJS (NVM)

Al momento de instalar Node en nuestro computador, podemos optar por instalarlo directamente o mediante un manejador de versiones. Si eligiéramos instalarlo directamente solo tendríamos una versión única del framework, lo cual se puede volver complejo a medida que comenzamos a trabajar con diferentes proyectos. La solución a esto es utilizar un manejador de versiones: NVM (Node Version Manager). Este manejador se encargará de controlar las diferentes versiones de node dentro de nuestro computador, permitiendo que podamos cambiar fácilmente entre ellas a medida que lo necesitamos.

Instalación ⬇️

Se puede seguir la guía de instalación desde el repositorio oficial de NVM.

Principales comandos 📜

  • Para instalar una versión:

    nvm install node //node indica la última versión
    
    nvm install 10.10.0 //instala una versión específica
    
  • Para cambiar de versión: Esto hará que todo el computador utilice la versión indicada.

    nvm user node //node indica la última versión
    
    nvm use 10.10.0
    

Librerías de NodeJS 📑

Dentro de Node también tenemos librerías que nos permiten facilitar algunas labores sin tener que programar todo. Si ya han trabajado con Ruby on Rails (RoR) conocerán el término "gemas", aquí es similar y se tratan como "node modules" o módulos.

Requerimiento de módulos:package.json 📝

Dentro de un proyecto con NodeJS encontrarán un archivo llamado package.json. Este archivo describe cómo debe comportarse el proyecto, es decir, indica la versión de Node a utilizar, junto a todas las librerías que necesitan instalar. Un ejemplo de un archivo básico sería el siguiente:

{
    "name": "ejemplo-package", //Nombre del proyecto
    "version": "0.0.1", //Versión del proyecto
    "description": "Comparison of Node.js template languages.", //Descripción del proyecto
    "author": "Paul Armstrong <paul@paularmstrongdesigns.com>", //Autor del proyecto
    "dependencies": { //Librerías requeridas <<==============
        "nopt": ">=1.0.8", //nombre_librería: versión_requerida
        "bench": ">=0.3.2",
        "nodelint": "0.5.2",
        "underscore": ">=1.1.7",
        "coffeekup": "0.3.0",
        "ejs": "0.4.2",
    }
}

Fuente: https://github.com/paularmstrong/node-templates/blob/master/package.json

node_modules/

Cada vez que se instale una librería para utilizar en Node, su información será almacenada en el directorio node_modules/. Es importante no alterar su información directamente, ya que Node no espera que eso suceda y no comprueba esos cambios.

Manejador de dependencias NPM y Yarn

Al momento de trabajar con las librerías antes mencionadas, debe haber una forma de instalarlas, actualizarlas o eliminarlas. Aquí entran nuestros manejadores de dependencias:

  • Node Package Manager (NPM): Esta es la herramienta que tiene Node por defecto para el manejo de dependencias. Se instala por defecto junto a node.
  • Yarn: Es un manejador que creó Facebook en contraparte a Node debido a algunos problemas que solía tener NPM. Se instala externamente. Se aconseja no usar la instalación por defecto en algunas distribuciones de Ubuntu como cmdtest. Se aconseja remover cmdtest y luego seguir la guía de instalación oficial.

Ambos manejadores trabajan en base a package.json para el manejo de dependencias, pero cada uno tiene sus cualidades y veremos cuales son las principales.

¿NPM o Yarn?

Antes de NPM 5, NPM solía ser bastante lento, no instalaba de forma determinista los paquetes y no configuraba directamente package.json al instalar una nueva librería. Debido a esto nació Yarn, el cual si permitía hacer todo lo anterior, fuera de ser 2-3 veces más rápido en la instalación de dependencias. Hoy en día, Yarn y NPM 5 se encuentran bastante a la par, pero Yarn sigue siendo el preferido, ya que entre otras cosas sigue superando en rapidez.

Instalar dependencias 📖

Ahora, visto todo lo anterior, podemos agregar dependencias a nuestro proyecto. Para esto tenemos dos opciones, agregar la nueva librería de forma manual al package.json o agregarla a través del manejador.

  • Instalación directa en package.json: Para esto solo debemos modificar el archivo package.json agregando la nueva librería en el diccionario "dependencies" según el formato nombre_librería: versión_librería. Por ejemplo agreguemos jQuery:

    //package.json
    {
        ...,
        "dependencies": {
            ...,
            "jquery": "3.5.1"   
        }
    }

    Ahora solo hemos modificado el archivo, por lo tanto, falta realizar la instalación. Para eso ejecutamos lo siguiente desde la terminal dependiendo de nuestro manejador de dependencias:

    npm install
    yarn install

    Eso instalará todo (o lo que falte) desde package.json en node_modules/.

  • Instalación mediante manejador NPM o Yarn: Con el manejador esto puede resultar un poco más sencillo, ya que solo basta con ejecutar un comando para que el manejador actualice package.json e instale la librería. Ejemplo con jQuery:

    • En caso de utilizar NPM:
      npm install jquery
      Lo anterior instalará la última versión estable de la librería, pero se puede especificar una versión mediante el uso de @.
      npm install jquery@3.5.1
    • En caso de utilizar Yarn:
      yarn add jquery
      Lo anterior instalará la última versión estable de la librería, pero se puede especificar una versión mediante el uso de @.
      yarn add jquery@3.5.1

    Para ambos mecanismos, es válida la información oficial de los las librerías encontrada en el sitio web de NPM.

Lockfiles y node_modules/

Tanto Yarn como NPM (desde la versión 5) utilizan LockFiles para determinar el orden y versiones de instalación para las librerías. Estos archivos permiten que las dependencias de un proyecto se mantengan constantes independientemente del entorno de ejecución, es decir, para todos los desarrolladores del proyecto tendrán los mismos módulos instalados y por lo tanto, sus directorios node_modules/ serán idénticos. Para Yarn se tiene el archivo yarn.lock y npm tiene package-lock.json. Cada uno tiene su formato de escritura y es válido únicamente en el manejador respectivo. Por lo mismo, es recomendable atenerse a uno solo de ambos manejadores, ya que yarn no actualiza el package-lock.json y npm no actualiza el yarn.lock.