Fast jede Funktion (außer require
), die Dateipfade als Argument verwendet, wird an einem Punkt Funktionen aus dem fs
-Modul verwenden, um von ihnen zu lesen oder zu schreiben.
Node.js documentation for fs module sagt:
Relativer Pfad zum Dateinamen verwendet werden kann, aber denken Sie daran, dass dieser Weg relativ sein process.cwd().
Wenn Sie darüber nachdenken, würde es große Tricks erfordern, dass sich diese Funktionen anders verhalten. Immerhin sind die fs-Funktionen normales Javascript und sie haben keinen speziellen Zugang zu Informationen über den Anrufer. Die einzigen __dirname
, auf die sie zugreifen könnten, wären die __dirname
ihres eigenen Moduls (das Kern-FS-Modul).
Die Tatsache, dass die require
Funktion können resolve Pfade relativ zum aktuellen __dirname
, ohne dass dies explizit spezifiziert, ist, weil require
eine einzigartige Funktion für jede einzelne Datei ist es angezeigt wird. Auf diese Weise hat es Zugriff auf den aktuellen Modul Besonderheiten, und insbesondere seinen Weg.
Der Grund dafür, dass Ihr Code passiert, ist, dass zur Zeit der app.js
(oder ähnlich) der obige Code zufällig in demselben Verzeichnis ist wie das, was process.cwd()
derzeit ist. I.e. Starten der App mit node app.js
würde funktionieren, beim Starten der App mit node myappdir/app.js
(lief aus dem übergeordneten Verzeichnis) nicht. process.cwd()
wäre anders.
Solange Sie bedenken, dass relative Pfade über aufgelöst werden, könnten Sie die kürzere Syntax verwenden. In manchen Fällen kann dies von Vorteil sein. Es macht Ihren Code abhängig davon, wie es heißt. Ich persönlich bevorzuge die Verwendung __dirname
, weil es etwas transparenter ist, was passiert, und die relativen Pfade konsistent mit den Pfaden, die Sie in einer Anweisung für die gleiche Datei verwenden.
Ich glaube, dass die letzte Art der Definition von Standorten auf Windows brechen wird. Ich bin 90% mit '__dirname + '/ Ordner' ist der sicherste Ansatz (ohne konkrete Beweise, nur zufällige Erfahrung mit Knoten in Windows herumspielen). –