Learn

Scripts et lockfiles

Lancer des tâches via npm run, comprendre le rôle du fichier lock, et pourquoi tu dois le committer.

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 :

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 ."
  }
}

Lancer un script

Avec pnpm :

shell
pnpm run dev

Raccourci pnpm (sans run) :

shell
pnpm dev
shell
pnpm build
shell
pnpm test

Avec bun :

shell
bun run dev
shell
bun dev

Avec npm :

shell
npm run dev

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 :

json
{
  "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 :

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

Sans 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 managerFichier lockFormat
npmpackage-lock.jsonJSON lisible
pnpmpnpm-lock.yamlYAML lisible
bunbun.lockbBinaire

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 :

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

Format du lockfile pnpm

À côté

À côté · vercelDéployer ton premier projet

Coche les étapes pour débloquer la suite

Retour au cours