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:
{
"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:
Atajo de pnpm (sin run):
Con bun:
Con npm:
Scripts especiales: pre y post
pnpm y npm reconocen los prefijos pre y post para ejecutar scripts antes y después de otro:
{
"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:
# extracto de pnpm-lock.yaml
react:
specifier: ^18.3.0
version: 18.3.1Sin 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 manager | Archivo lock | Formato |
|---|---|---|
| npm | package-lock.json | JSON legible |
| pnpm | pnpm-lock.yaml | YAML legible |
| bun | bun.lockb | Binario |
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:
Formato del lockfile de pnpm