Learn

Scripts y lockfiles

Lanzar tareas con npm run, entender el rol del archivo lock, y por qué debes commitearlo.

El package.json no solo lista tus dependencias: también define scripts (atajos para lanzar comandos largos). Y a su lado, el lockfile garantiza que tu instalación sea reproducible.

Los scripts en package.json

La sección scripts del package.json define alias de comandos:

json
{
  "scripts": {
    "dev": "vite --port 3000",
    "build": "vite build",
    "preview": "vite preview",
    "test": "vitest",
    "lint": "eslint . --ext .ts,.tsx",
    "typecheck": "tsc --noEmit",
    "format": "prettier --write ."
  }
}

Lanzar un script

Con pnpm:

shell
pnpm run dev

Atajo de pnpm (sin run):

shell
pnpm dev
shell
pnpm build
shell
pnpm test

Con bun:

shell
bun run dev
shell
bun dev

Con npm:

shell
npm run dev

Scripts especiales: pre y post

pnpm y npm reconocen los prefijos pre y post para ejecutar scripts antes y después de otro:

json
{
  "scripts": {
    "prebuild": "pnpm typecheck",
    "build": "vite build",
    "postbuild": "node scripts/compress-assets.js"
  }
}

pnpm build ejecutará automáticamente prebuild, luego build, luego postbuild.

El rol del lockfile

Tu package.json declara rangos de versiones (^18.3.0). Pero cuando ejecutas pnpm install, pnpm resuelve esos rangos e instala versiones exactas.

El lockfile registra esas versiones exactas:

yaml
# extracto de pnpm-lock.yaml
react:
  specifier: ^18.3.0
  version: 18.3.1

Sin lockfile, dos desarrolladores que clonan el mismo proyecto con dos días de diferencia podrían instalar versiones distintas si un paquete se actualizó entretanto. Con el lockfile, todos tienen exactamente las mismas versiones.

Los tres lockfiles

Package managerArchivo lockFormato
npmpackage-lock.jsonJSON legible
pnpmpnpm-lock.yamlYAML legible
bunbun.lockbBinario

Un solo lockfile por repositorio

Si ves dos lockfiles en el mismo proyecto (package-lock.json Y pnpm-lock.yaml), hay un problema. Alguien ejecutó el gestor equivocado. Elimina uno de los dos (y node_modules/) y reinstala con el gestor correcto.

El comando para limpiar antes de migrar a pnpm:

shell
rm -rf node_modules package-lock.json
shell
pnpm install

Formato del lockfile de pnpm

Relacionado

Ver también · vercelDesplegar tu primer proyecto

Marca los pasos para desbloquear lo siguiente

Volver al curso