- Angenommen, ich habe eine Datei im Stammverzeichnis meines Projekts mit dem Namen "file.xml".
- Angenommen, ich habe eine Testdatei in tests / mit dem Namen "test.js" und sie hat
const file = fs.readFileSync("../file.xml");
Wenn ich jetzt node ./tests/test.js
vom Stammverzeichnis meines Projekts aus starte, heißt es, dass ../file.xml nicht existiert. Wenn ich denselben Befehl im Testverzeichnis ausführe, funktioniert er.
Es scheint, dass fs.readFileSync relativ zu dem Verzeichnis ist, aus dem das Skript aufgerufen wird, anstatt zu dem Verzeichnis, in dem sich das Skript tatsächlich befindet. Wenn ich fs.readFileSync("./file.xml")
in test.js schreibe, sieht es verwirrender aus und stimmt nicht mit relativen Pfaden in einer require-Anweisung überein, die dateirelativ sind.
Warum ist das?
Wie kann ich vermeiden, dass die Pfade in meinem fs.readFileSync neu geschrieben werden müssen?
__dirname
ist nicht unbedingt dasselbe wie das aktuelle Arbeitsverzeichnis, sondernfs.readFileSync()
verwendet das aktuelle Arbeitsverzeichnis. Das aktuelle Arbeitsverzeichnis wird wahrscheinlich auf das eingestellt, was es war, als Sie den Knoten gestartet haben.