DEV Community

Cover image for Le package.json
Benjamin Auzanneau
Benjamin Auzanneau

Posted on • Originally published at 616.earth

Le package.json

Le manifeste

Le package.json est le fichier manifeste d'un projet JavaScript.

Il raconte ce que ton projet est, ce dont il dépend et comment il se construit ou se lance.

L'origine

Au debut de Node.js, chaque module devait declarer son nom, sa version et ses dépendances pour etre installé correctement. Le package.json s'est imposé avec npm comme format standard pour decrire un package.

C'etait un moyen simple et lisible de partager un module et de permettre a npm de résoudre les dépendances.

Il n'y a pas que npm qui utilise le package.json : yarn, pnpm et d'autres gestionnaires de paquets s'appuient aussi dessus avec une façon différente de gérer les dépendances et surtout, le moyen de les résoudre.

Les attributs

Dans les grandes lignes, on trouve plusieurs categories de champs dans le package.json :

  • Identité : name, version, description, license, author.
  • Dépendances : dependencies, devDependencies, peerDependencies, optionalDependencies.
  • Scripts : commandes standardisees (npm run dev, build, test, etc.) ou non.
  • Compatibilitée : engines, os, cpu pour cadrer l'environnement.
  • Publication : ce qui est inclus dans le package, la version, les fichiers d'entrée.
  • Customisation: des champs specifiques aux outils (babel, eslint, jest, etc.) ou tout simplement que vous souhaitez utiliser.

Dans la partie scripts, j'ai récemment découvert les commandes prebuild et postbuild qui vont automatiquement se lancer respectivement avant et après la commande build

{
  "name": "mon-projet", // identite du package
  "version": "1.0.0", // version publiee
  "description": "Mon app de demo",
  "license": "MIT", // license du package
  "author": "necraidan",
  "scripts": {
    "dev": "vite", // commande de dev
    "build": "vite build", // build de production
    "test": "vitest" // tests
  },
  "dependencies": {
    "react": "^18.3.0" // deps runtime
  },
  "devDependencies": {
    "vite": "^5.4.0", // outils de dev
    "vitest": "^2.1.0"
  },
  "peerDependencies": {
    "react": ">=18" // compatibilité attendue
  },
  "optionalDependencies": {
    "fsevents": "^2.3.3" // optionnel (ex: macOS)
  },
  "engines": {
    "node": ">=20" // version node ciblee
  },
  "eslintConfig": {
    "extends": ["eslint:recommended"] // champs custom
  }
}
Enter fullscreen mode Exit fullscreen mode

Focus sur les dépendances

  • dependencies : indispensables au fonctionnement de l’app en production.
  • devDependencies : utiles en développement (tests, lint, build), pas nécessaires en prod.
  • peerDependencies : indiquent la compatibilité attendue avec un autre package sans l’embarquer soi‑même (ex. une lib React qui attend React installé).
  • optionalDependencies : optionnelles ; si l’installation échoue, npm continue quand même. À toi de gérer l’absence au runtime.
  • bundleDependencies : dépendances embarquées lors de la publication du package.

Pour aller plus loin, la documentation officielle du package.json.

Conclusion

Encore une fois c'est un mémo qui peut paraitre trivial mais qui me parait utile, surtout quand je souhaite creuser un sujet et laisser une trace pour plus tard.

Top comments (0)