__dirname ist kein definierter Fehler in der Node 14-Version [duplicate]
Lesezeit: 4 Minuten
Eduard
Ich habe die Node-Version verwendet 12.3.4 aktualisierte es auf 14.14.0 und fing an, viele Probleme zu erhalten, die ich behoben habe. Das einzige, was ich nicht verstehe, ist das Problem
__dirname is not defined
__dirname ist eine Kernvariable in Node, wie ich weiß. Wird sie in Node 14 entfernt?
Ist das in MJS oder CJS? Im MJS-Modus benötigen Sie einen Shim, da es mit anders funktioniert import.
Vielen Dank. Ich war dabei hängengeblieben. Ich habe auf es6 neu formatiert und mein ‘Pfad’-Import ist kaputt gegangen. Code davor war so etwas wie res.status(200).sendFile(path.join(__dirname, ‘/public/main.js’)). Ich habe die von Ihnen empfohlenen Importe verwendet und in res.status(200).sendFile(__dirname + ‘/public/main.js’) geändert. Nochmals danke, danke.
ReferenceError: __dirname ist nicht im Geltungsbereich des ES-Moduls definiert
Und ich habe das gelöst, indem ich unten Code hinzugefügt habe.
import path from 'path';
const __dirname = path.resolve();
Dies löst nur die cwd des Node-Prozesses auf, also zB node myscript.mjs wird aber funktionieren node dir/myscript.mjs wird nicht.
– Dan
10. September 2021 um 22:13 Uhr
Dieser hat mein Problem gelöst.
– Nilay Singh
5. April 2022 um 8:16 Uhr
Ich habe eigentlich versucht zu reparieren path.resolve(__dirname, "foo", "bar")weil mir nicht klar war, dass es den Pfad sowieso relativ machen wird, wenn Sie ihm nur Pfadsegmente übergeben – Sie können einfach weglassen __dirname. Danke!
– Kodierer
18. Juli 2022 um 14:24 Uhr
Es besteht normalerweise keine Notwendigkeit, aus „url“ oder „path“ zu importieren.
liest myfile.txt aus dem Verzeichnis der JavaScript-Datei (nicht aus dem aktuellen Arbeitsverzeichnis).
Coole Lösung, aber für diejenigen, die sich nicht auskennen und/oder nicht in einem Browserkontext arbeiten, in dem die Verwendung von URLs etwas fehl am Platz erscheint, nicht sehr klar. Vielleicht könnten Sie darauf eingehen, wann dies besonders angebracht ist?
– Dan
10. September 2021 um 22:03 Uhr
Ok, sieht so aus, als müsste ich nur meine Gedanken aktualisieren. path.resolve() gibt nur cwd zurück. Andere Methoden sind langatmig. Das URL-Konzept ist in ES6-Module integriert. Es scheint, dass dies jetzt der Standardansatz ist stackoverflow.com/a/66651120/4682556. Danke für diese Antwort!
– Dan
10. September 2021 um 22:11 Uhr
Dies gibt a zurück Bufferwenn Sie eine Zeichenfolge verwenden möchten: fs.readFileSync(new URL('myfile.txt', import.meta.url), 'utf-8');
– Michael Stramel
6. Oktober 2021 um 22:27 Uhr
Das ist großartig, danke! Keine zusätzlichen Anforderungen, keine Hacks, zukunftssicher.
– Tomáš Kafka
19. November 2021 um 15:45 Uhr
@Dan Ja, eine URL wird ihrem Namen immer mehr gerecht: einheitlicher Ressourcen-Locator. Es ist nicht unbedingt auf eine Ressource im Web beschränkt.
– Константин Ван
10. Dezember 2022 um 4:26 Uhr
Eine schnelle Lösung (abhängig von Ihrem Projekt) wäre, dies sicherzustellen "type": "module" gibt es bei dir nicht package.json Datei
PUGAZHARASAN
Habe das über den obigen Link
import express from 'express';
import path from 'path';
import { fileURLToPath } from 'url';
const app = express();
//we need to change up how __dirname is used for ES6 purposes
const __dirname = path.dirname(fileURLToPath(import.meta.url));
//now please load my static html and css files for my express app, from my /dist directory
app.use(express.static(path.join(__dirname ,'dist')));
//works...
14420400cookie-check__dirname ist kein definierter Fehler in der Node 14-Version [duplicate]yes
Ist das in MJS oder CJS? Im MJS-Modus benötigen Sie einen Shim, da es mit anders funktioniert
import
.– Tadman
16. Oktober 2020 um 6:23 Uhr
Dokumentation
– Jaromanda X
16. Oktober 2020 um 6:27 Uhr