Tipos de dependencias

Las dependencias sirven muchos propósitos diferentes. Algunas dependencias se necesitan para compilar tu proyecto, otras se necesitan cuando tu programa se ejecuta. Como tal, existen un número de diferentes tipos de dependencias que puedes tener (Por ejemplo: dependencias dependencies, dependencias de desarrollo devDependencies, and dependencias en pares peerDependencies).

Tu package.json contendrá todas estas dependencias:

{
  "name": "my-project",
  "dependencies": {
    "package-a": "^1.0.0"
  },
  "devDependencies": {
    "package-b": "^1.2.1"
  },
  "peerDependencies": {
    "package-c": "^2.5.4"
  },
  "optionalDependencies": {
    "package-d": "^3.1.0"
  }
}

La mayoría de personas solo tiene dependencies y devDependencies, pero cada uno de estos, son importantes de entender.

dependencies

Estas son dependencias normales, o las que se necesitan para ejecutar tu código (Por ejemplo: React o ImmutableJS).

devDependencies

Estas son las dependencias de desarrollo. Dependencias que necesitas en algún punto en tu proceso de desarrollo pero no al ejecutar tu código (Por ejemplo: Babel o Flow).

peerDependencies

Las dependencias en pares son un tipo especial de dependencia que solo se necesitan si estás publicando tu paquete.

Al tener una dependencia en par, significa que tu paquete necesita una dependencia que es exactamente la misma dependencia que la persona que instala tu paquete. Esto es útil para paquetes como react que necesita tener una única copia de react-dom que también es usada por la persona que instala tu paquete.

optionalDependencies

Dependencias opcionales son justo eso: opcionales. Si no se instalan, Yarn de todas formas dirá que el proceso de instalación fue exitoso.

Esto es útil para dependencias que no necesariamente funcionarán en todas la maquinas y tienes un pan de respaldo en caso de que no sean instaladas. (Por ejemplo: Watchman).

bundledDependencies

Un arreglo de nombres de dependencias que son empaquetadas al publicar tu paquete.

Las dependencias empaquetadas deben estar dentro de tu proyecto. La funcionalidad es básicamente lo mismo que dependencias normales. Pero estas también serán empaquetadas al ejecutar yarn pack.

Las dependencias normales son generalmente instaladas del registro de npm. Las dependencias empaquetadas son útiles en casos que dependencias normales no son suficientes:

  • Cuando quieres re-utilizar una librería de terceros que no provienen del registro de npm o que fue modificada.
  • Cuando quieres reutilizar tus propios proyectos como módulos.
  • Cuando quieres distribuir algunos archivos con tu módulo.