ACLClouds
ACLClouds

Node.js affiche MODULE_NOT_FOUND

Distinguer dépendance non installée, import local incorrect et mauvais dossier de travail. MODULE_NOT_FOUND donne le nom du paquet ou du fichier recherché.

MODULE_NOT_FOUND donne le nom du paquet ou du fichier recherché. Le correctif dépend de la cible : un paquet npm se réinstalle, un fichier local exige un chemin correct.

Procédure étape par étape

  1. Lire le module manquant

    Si le nom ne commence pas par ./ ou ../, il s’agit généralement d’un paquet npm. Sinon, vérifiez le fichier local et sa casse.

  2. Contrôler package.json

    Le paquet doit apparaître dans dependencies, pas seulement sur votre ordinateur de développement.

  3. Réinstaller proprement

    Sur ACLClouds, les dépendances s’installent au démarrage à partir de package.json et du lockfile. Pour repartir de zéro, utilisez « Réinstaller le serveur » dans Paramètres ; en local, npm ci fait de même avec un package-lock.json.

  4. Vérifier le répertoire

    package.json doit se trouver à la racine des fichiers du bot, là où la plateforme installe les dépendances et lance le bot. En local, lancez npm dans ce dossier ou utilisez --prefix.

Diagnostic npm

pwd
ls -la
npm ci
npm ls --depth=0

Ajouter le paquet en local, puis envoyer package.json et le lockfile

npm install discord.js dotenv
npm ls --depth=0

Installation par la plateforme

Vous n’avez pas de commande à lancer. À chaque démarrage, la plateforme compare package.json et le lockfile (package-lock.json, yarn.lock ou pnpm-lock.yaml) avec la dernière installation réussie. S’ils ont changé, ou si la version de Node.js a changé, la console affiche « Installation des dépendances (npm install) » puis « Dépendances installées en N s ».

Si l’installation échoue, la console affiche « Échec de l’installation des dépendances » avec la ligne d’erreur utile. Le Cannot find module qui suit est alors précédé de « Module introuvable : la dernière installation des dépendances a échoué ». Corrigez d’abord l’erreur d’installation : le module manquant n’en est que la conséquence.

Le bouton « Installer » du diagnostic

Quand le nom manquant est un paquet npm, la console ouvre la fenêtre « Module manquant » avec un bouton « Installer ». Il ajoute le paquet aux dependencies de package.json avec la version latest, crée ce fichier s’il n’existe pas, puis redémarre le bot pour l’installer.

  • Remplacez ensuite latest par la version testée en local, par exemple ^14.16.3, pour éviter une mise à jour majeure imprévue ;
  • un chemin comme lodash/fp correspond au paquet lodash, et @discordjs/voice s’installe sous ce nom complet ;
  • un nom qui commence par ./, ../ ou / n’est pas un paquet : aucun bouton n’est proposé, corrigez le chemin dans votre code.

Vérifier que tout fonctionne

Après le redémarrage, la console doit afficher la fin de l’installation sans ligne npm error, puis la commande lancée, par exemple $ node index.js, et la sortie de votre bot. En local, npm ls --depth=0 doit lister le paquet sans la mention missing.

Questions fréquentes

Que signifie Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'dotenv' ?

C’est la même erreur avec les modules ES (import). Le paquet dotenv est importé par le code mais absent de package.json, ou son installation a échoué. Ajoutez-le aux dependencies, ou utilisez le bouton « Installer », puis redémarrez.

Pourquoi Cannot find module '/app/commands/ping' imported from /app/index.js alors que ping.js existe ?

Avec import, Node.js n’ajoute pas l’extension : écrivez ./commands/ping.js. Avec require, vérifiez la casse du dossier et du fichier, car Commands et commands sont deux dossiers différents sous Linux.

J’ai envoyé mon dossier node_modules et le bot plante quand même : pourquoi ?

Un node_modules copié depuis Windows ou macOS contient des modules natifs compilés pour un autre système, d’où des erreurs comme invalid ELF header. Supprimez ce dossier dans Fichiers, gardez package.json et le lockfile, puis cliquez sur « Réinstaller le serveur » dans Paramètres.

L’installation échoue avec npm error 404 Not Found : que faire ?

Le nom du paquet est mal orthographié ou la version demandée n’existe pas sur le registre npm. Vérifiez la ligne concernée dans package.json, comparez-la avec la page du paquet sur npmjs.com, corrigez-la puis redémarrez le bot.