ACLClouds
ACLClouds

npm affiche ENOENT : package.json est introuvable

Retrouver la racine du projet et éviter de lancer npm dans le mauvais dossier. Ouvrez Fichiers et cherchez package.json.

ENOENT package.json signifie que npm travaille dans un dossier qui ne contient pas le manifeste. Le fichier peut être absent, mal nommé ou situé dans un sous-dossier après import Git.

Procédure étape par étape

  1. Lister la racine

    Ouvrez Fichiers et cherchez package.json. Vérifiez qu’il ne se trouve pas dans un dossier créé par l’archive GitHub.

  2. Corriger la commande

    Déplacez le projet à la racine plutôt que d’écrire cd mon-projet && npm start : les dépendances ne sont installées que depuis le package.json de la racine.

  3. Vérifier le nom

    Package.json avec une majuscule n’est pas reconnu sous Linux.

  4. Créer seulement si nécessaire

    N’utilisez npm init que pour un nouveau projet ; sur un projet existant, récupérez le vrai manifeste depuis le dépôt.

Exemple de package.json minimal

{
  "name": "mon-bot",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "discord.js": "^14.16.0"
  }
}

Ce que la plateforme lit

Pour un bot Node.js, package.json est lu à la racine du bot, c’est-à-dire le premier niveau de l’onglet « Fichiers ». Il sert à deux choses.

Si le fichier se trouve un niveau plus bas, rien n’est installé et la commande ne peut pas être devinée : le bot s’arrête dès le lancement, avec ENOENT ou Cannot find module.

  • Installer les dépendances : la liste dependencies est installée au démarrage, en respectant package-lock.json, yarn.lock ou pnpm-lock.yaml s’il est présent.
  • Trouver la commande de démarrage : le script start est utilisé en premier, puis le champ main, puis un fichier courant comme index.js ou bot.js.

Remettre le projet à la racine

Le cas le plus fréquent est une archive ZIP téléchargée depuis GitHub : elle contient un dossier du type mon-bot-main, et tout le projet se retrouve dedans après l’extraction. Ouvrez ce dossier dans « Fichiers », sélectionnez tout son contenu et déplacez-le au premier niveau, puis supprimez le dossier vide.

N’envoyez pas le dossier node_modules : il est recréé par l’installation. Dans l’onglet « Démarrage », laissez « Commande de démarrage » vide pour que la détection automatique reprenne, ou cliquez sur « Revenir à la détection automatique » si une ancienne commande y est enregistrée.

Vérifier le démarrage

Redémarrez le bot. La console doit afficher l’installation des dépendances avec npm install, puis la commande lancée, par exemple $ node index.js. Si la commande pointe encore vers l’ancien sous-dossier, corrigez-la dans l’onglet « Démarrage » et redémarrez une seconde fois.

Questions fréquentes

Que signifie npm ERR! enoent Could not read package.json ?

La commande de démarrage appelle npm, mais aucun package.json n’existe dans le dossier où elle s’exécute. La ligne suivante de l’erreur donne le chemin cherché. Comparez-le avec l’emplacement réel du fichier dans « Fichiers » : soit le fichier est dans un sous-dossier, soit il n’a pas été envoyé.

Pourquoi npm ERR! Missing script: "start" ?

Cette fois package.json est bien trouvé, mais il ne contient pas de script start alors que la commande est npm start. Ajoutez le script dans la section scripts, comme dans l’exemple ci-dessous, ou saisissez directement node index.js dans « Commande de démarrage ».

Mon bot est en Python, ai-je besoin de package.json ?

Non. Un bot Python déclare ses dépendances dans requirements.txt et se lance avec python. Si l’erreur apparaît quand même, la commande de démarrage contient npm start par erreur : videz le champ « Commande de démarrage » pour revenir à la détection automatique, qui cherche bot.py ou main.py à la racine.

Le fichier est à la racine mais l’erreur persiste, pourquoi ?

Regardez le nom exact. package.json.txt, ajouté par certains éditeurs sous Windows, ou Package.json ne sont pas reconnus. Renommez le fichier en package.json, tout en minuscules. Vérifiez aussi que son contenu est un JSON valide : une virgule en trop provoque EJSONPARSE au lieu de ENOENT.