Diferencia entre composer.json y composer.lock

- Andrés Cruz

EN In english

Diferencia entre composer.json y composer.lock

Composer es un administrador de dependencias de PHP y para PHP, lo que quiere decir es que podemos instalar paquetes para PHP fácilmente si usamos un proyecto con soporte a PHP; actualmente todos los frameworks para PHP modernos como Laravel o CodeIgniter ya de gratis vienen con soporte a Composer por lo tanto, el uso de esta herramienta es fundamental. 

Composer es una herramienta que permite declarar las bibliotecas de las cuales depende el proyecto y las versiones especificas de estas; automáticamente al hacer un composer install o update se instalan las dependencias.

En Laravel y cualquier proyecto PHP que emplee composer para administrar los paquetes, tenemos dos tipos de archivos, composer.json y composer.lock y en esta entrada veremos cuál es la diferencia entre ellos.

Código abierto

En composer.json especificas qué paquetes se deben instalar y con qué versiones, es decir se encuentran los paquetes que conforman el proyecto. Por ejemplo:

   "require": {
       "artesaos/seotools": "^1.3",
       "laravel/framework": "^11.0",

Este archivo es generado por composer y es empleado por el mismo para descargar e instalar las dependencias del proyecto en Laravel u otro.

En el ejemplo anterior, estamos indicando los paquetes de laravel/framework y artesaos/seotools que deben ser instalados con la version 1.3 o superior y 11 o superior respectivamente, si quisieras una versión exacta, removerías el carácter de ^.

En este archivo también se encuentra otras reglas como nombre, descripción del proyecto y versiones mínimas, como:

"php": "^8.2",

El composer.json  sirve para mucho más, pero, esto es lo fundamental.

Mientras que el composer.lock registra las versiones especificas que esta instalando y es el que lee composer al momento de ejecutar composer update, este archivo es generado automáticamente al momento de ejecutar el comando anterior.

Actualizar proyecto

Usualmente, cuando se quiere actualizar el proyecto, se puede eliminar este archivo y ejecutar nuevamente el comando de 

$ composer install

Con esto, se vuelve a generar el .lock con nuevas versiones.

Extra: Actualizar Composer a la versión 2

Vamos a conocer cómo puedes migrar o actualizar tu versión de composer de 1 a la 2 empleando Laragon, aunque, los pasos los puedes repetir independientemente del sistema que estés usando.

Posicionarse en el directorio de la instalación de composer

En tu terminal, tienes que hacer un cd para posicionarse en la ubicación de la instalación de composer en Laragon:

? cd..
C:\laragon\www
?

Verificar la versión de Composer V1

Para saber con que version de composer estás trabajando, tienes que ejecutar el siguiente comando:

composer -V

En mi caso, me arroja algo como lo siguiente:

Composer version 1.10.7 2020-12-03 17:18:15

Descargar Composer 2

La descarga e instalación de composer en su versión 2 la podemos hacer mediante la línea de comandos empleando php; para ello:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

El comando anterior lo que hace es descargar el instalador de composer 2 en el directorio en donde estamos posicionados; ahora tenemos que ejecutar el mismo.

Instalar (ejecutar el script php) Composer V2

php composer-setup.php

Y listo, ya con esto tenemos composer en su versión 2, por lo tanto, ya podemos eliminar el instalador:

Eliminar el instalador

Para eliminar el instalador de composer una vez utilizado podemos emplear la función unlink de php mediante el siguiente comando:

php -r "unlink('composer-setup.php');"

Verificar la versión de Composer V2

Por último, vamos a verificar la versión de composer que tenemos instalada, que en este punto, si hicimos todo bien, debería ser la 2.x

composer -V

Un versión que incluya el 2.x

Composer version 2.0.8 2026-12-03 17:20:38
En Laravel y cualquier proyecto PHP que emplee composer para administrar los paquetes, tenemos dos tipos de archivos, composer.json y composer.lock, veremos para qué sirve cada uno y la diferencia.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz

EN In english