03. II. Dependencias

Por: Artiko
12factordependenciasaislamiento

03. II. Dependencias

Declara explícitamente y aísla las dependencias.

La regla

Una aplicación twelve-factor nunca depende de la existencia implícita de paquetes instalados a nivel de sistema operativo. Todas las dependencias se declaran, completa y exactamente, mediante un manifiesto de dependencias.

Esto se logra con dos prácticas complementarias:

  1. Declaración: un archivo de manifiesto lista cada librería que la app necesita, idealmente con versión fijada.
  2. Aislamiento: una herramienta garantiza que, al ejecutar la app, sólo se usan las dependencias declaradas — nunca librerías “que ya estaban” en el sistema.

Herramientas por lenguaje

LenguajeDeclaraciónAislamiento
RubyGemfile (Bundler)bundle exec
Pythonrequirements.txt / pyproject.toml (Pip)Virtualenv / venv
Node.js / Bunpackage.jsonnode_modules local (ya aislado por diseño)
CAutoconfEnlace estático
ClojureLeiningen

El patrón se repite: un manifiesto + un entorno aislado, sin importar el lenguaje.

Por qué importa: onboarding y reproducibilidad

Cuando las dependencias están bien declaradas y aisladas, incorporar a alguien nuevo al proyecto se reduce a:

git clone <repo>
<gestor-de-paquetes> install

Sin pasos manuales tipo “primero instalá esta versión de ImageMagick en tu sistema” o “acordate de tener PostgreSQL 14 exacto porque si no explota”. Si esos pasos existen, es una señal de que hay dependencias implícitas sin declarar.

Herramientas del sistema también son dependencias

El factor también aplica a herramientas de línea de comandos que la app invoca como subproceso: curl, ImageMagick, wkhtmltopdf, etc. Si son imprescindibles, deben empaquetarse junto con la aplicación (por ejemplo, dentro de la imagen de contenedor), no asumirse como preinstaladas en el host de producción — porque en desarrollo probablemente sí lo estén, generando una divergencia silenciosa (ver Factor X, Paridad dev/prod).

Checklist del factor II

Con el código versionado (I) y las dependencias resueltas (II), el siguiente paso es separar lo que varía entre entornos: la configuración.