DedSec Project

require is not defined in ES module scope — DedSec Project

require is not defined in ES module scope Εντόπισε το module format Η Node υποστηρίζει CommonJS και ESM. Ένα .mjs ή .js κάτω από package.json με "type": "module" χρησιμοποιεί ESM. Η require…

Εντόπισε το module format

Η Node υποστηρίζει CommonJS και ESM. Ένα .mjs ή .js κάτω από package.json με "type": "module" χρησιμοποιεί ESM. Η require του CommonJS δεν είναι διαθέσιμη εξ ορισμού.

// config.mjs
import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";

const path = fileURLToPath(new URL("./settings.json", import.meta.url));
const text = readFileSync(path, "utf8");
const settings = JSON.parse(text);
console.log(settings.name);

Αναπαραγωγή με προσωρινό αρχείο

Φτιάξε settings.json δίπλα σε config.mjs με {"name":"offline"} και τρέξε node config.mjs. Περιμένεις offline. Το import.meta.url χρησιμοποιείται για διαδρομή σχετική με το ίδιο το module, όχι με το current working directory.

Πότε επιλέγουμε CommonJS

Αν το project χρησιμοποιεί συνειδητά CommonJS, διατήρησε .cjs με require αντί να αλλάζεις τυχαία το package.json. Μια εξάρτηση μπορεί να προσφέρει διαφορετικά exports· διάβασε την τεκμηρίωση του package.

Δοκιμές

Τρέξε το script από άλλο directory και βεβαιώσου ότι βρίσκει το γειτονικό αρχείο. Διέγραψε το settings.json μόνο σε scratch copy και διαχώρισε ENOENT από JSON syntax error. Μην ανακατεύεις paths που σχετίζονται με module και working directory.

Πηγή: https://nodejs.org/api/esm.html

Μην αναμειγνύεις ESM και CommonJS χωρίς σχεδιασμό

Όταν το package.json έχει "type": "module", τα .js αρχεία ερμηνεύονται ως ES modules. Το const fs = require("node:fs") δεν λειτουργεί ως απλό top-level require εκεί. Αν το αρχείο είναι ESM, χρησιμοποίησε import * as fs from "node:fs";. Αν χρειάζεσαι σκόπιμα CommonJS, ένα ξεχωριστό .cjs αρχείο έχει τη δική του σύμβαση. Δοκίμασε τα δύο αρχεία σε προσωρινό project με δηλωμένη Node έκδοση. Μην αντικαθιστάς μηχανικά κάθε require σε βιβλιοθήκες τρίτων: ο τρόπος εισαγωγής JSON και η διαλειτουργικότητα με ESM εξαρτώνται από Node έκδοση και διαμόρφωση.