Le package.json ne fait pas que lister tes dépendances : il définit aussi des scripts (raccourcis pour lancer des commandes longues). Et à côté, le fichier lock garantit que ton install est reproductible.
Les scripts dans package.json
La section scripts du package.json définit des alias de commandes :
{
"scripts": {
"dev": "vite --port 3000",
"build": "vite build",
"preview": "vite preview",
"test": "vitest",
"lint": "eslint . --ext .ts,.tsx",
"typecheck": "tsc --noEmit",
"format": "prettier --write ."
}
}Lancer un script
Avec pnpm :
Raccourci pnpm (sans run) :
Avec bun :
Avec npm :
Scripts spéciaux : pre et post
pnpm et npm reconnaissent les préfixes pre et post pour exécuter des scripts avant et après un autre :
{
"scripts": {
"prebuild": "pnpm typecheck",
"build": "vite build",
"postbuild": "node scripts/compress-assets.js"
}
}pnpm build exécutera automatiquement prebuild, puis build, puis postbuild.
Le rôle du lockfile
Ton package.json déclare des plages de versions (^18.3.0). Mais quand tu fais pnpm install, pnpm résout ces plages et installe des versions exactes.
Le lockfile enregistre ces versions exactes :
# extrait de pnpm-lock.yaml
react:
specifier: ^18.3.0
version: 18.3.1Sans lockfile, deux développeurs qui clonent le même projet à deux jours d'intervalle pourraient installer des versions différentes si un paquet a été mis à jour entre-temps. Avec le lockfile, tout le monde a exactement les mêmes versions.
Les trois lockfiles
| Package manager | Fichier lock | Format |
|---|---|---|
| npm | package-lock.json | JSON lisible |
| pnpm | pnpm-lock.yaml | YAML lisible |
| bun | bun.lockb | Binaire |
Un seul lockfile par repo
Si tu vois deux lockfiles dans un même projet (package-lock.json ET pnpm-lock.yaml), il y a un problème. Quelqu'un a lancé le mauvais package manager. Supprime l'un des deux (et le node_modules/) et réinstalle avec le bon gestionnaire.
La commande pour nettoyer proprement avant de migrer vers pnpm :
Format du lockfile pnpm