ERR_MODULE_NOT_FOUND — DedSec Project
Node ERR_MODULE_NOT_FOUND: ανάλυση imports Αναγνώριση της πραγματικής αποτυχίας Το ECMAScript import ψάχνει package ή path σύμφωνα με τους κανόνες ESM της Node. Αιτίες: package που λείπει…
Node ERR_MODULE_NOT_FOUND: ανάλυση imports
Αναγνώριση της πραγματικής αποτυχίας
Το ECMAScript import ψάχνει package ή path σύμφωνα με τους κανόνες ESM της Node. Αιτίες: package που λείπει, relative specifier χωρίς απαιτούμενη επέκταση, λάθος κεφαλαία σε Linux ή διαφορετικό working directory.
Ασφαλής αρχικός έλεγχος
node --version
node -p "process.cwd()"
node -p "require.resolve('fs')"
Διόρθωση αιτίας χωρίς παράκαμψη προειδοποίησης
Δες τον ακριβή import specifier, έλεγξε το package.json type και δοκίμασε import('./lib/task.js') με πραγματικό path και σωστά κεφαλαία. Κάνε npm install μόνο όταν επιβεβαιώσεις ότι πρόκειται για δηλωμένη εξάρτηση, όχι τυχαίο πακέτο με ίδιο όνομα.
Τεκμηρίωση: https://nodejs.org/api/esm.html
Αναπαραγωγή χωρίς εγκατάσταση πακέτων
Δημιούργησε έναν προσωρινό φάκελο με lib/math.mjs και app.mjs. Στο πρώτο αρχείο βάλε:
export const double = n => n * 2;
Στο δεύτερο:
import { double } from './lib/math.mjs';
console.log(double(21));
Το node app.mjs αναμένεται να εμφανίσει 42. Μετονόμασε μόνο το math.mjs σε Math.mjs, κράτησε το παλιό import και δοκίμασε σε σύστημα με διάκριση κεφαλαίων: τώρα το μονοπάτι δεν ταιριάζει. Στη συνέχεια επανάφερε το όνομα και αφαίρεσε την κατάληξη .mjs από το import. Το native ESM δεν συμπληρώνει αυτόματα την επέκταση σε τέτοια σχετικά μονοπάτια.
Διαχωρισμός των περιπτώσεων
Το μήνυμα μπορεί να προέρχεται από τοπικό αρχείο ή πακέτο. Για τοπικό import έλεγξε την πραγματική θέση σε σχέση με το αρχείο που κάνει το import — όχι μόνο το process.cwd(). Για πακέτο δες το dependencies, την εγκατάσταση και το πεδίο exports του package.json. Μην συμπεραίνεις ότι το require.resolve() αναπαράγει ακριβώς το ESM, επειδή το CommonJS έχει διαφορετικούς κανόνες επίλυσης. Σε Linux/Termux τα κεφαλαία συνήθως μετράνε, ενώ σε ορισμένα Windows filesystems μπορεί να μην αποκαλύπτεται το ίδιο σφάλμα.
Έλεγχος ολοκλήρωσης
Η σωστή λύση πρέπει να περνάει με ακριβή σχετική διαδρομή και με τη σωστή επέκταση, χωρίς «τυχαία» νέα εξάρτηση. Αν αποτυγχάνει μόνο στο CI, έλεγξε πρώτα το όνομα και την περίπτωση χαρακτήρων. Αν αποτυγχάνει μόνο σε production, σύγκρινε το build output και τα δηλωμένα exports του πακέτου.