Ich frage mich, ob es eine beste Möglichkeit oder Best Practice gibt, um den vollständigen Pfad der Anwendung in Node.js zu erhalten. Beispiel: Ich habe ein Modul im Unterordner /apps/myapp/data/models/mymodel.js, und ich möchte den vollständigen Pfad der App (nicht vollständigen Pfad der Datei) erhalten, die mir zurückgeben wird/apps/myapp, wie mache ich das? Ich weiß, _ dirname oder _file ist nur relativ zu der Datei selbst, aber nicht den vollständigen Pfad der App.Holen Sie sich den vollständigen Anwendungspfad in Node.js
Antwort
Es ist wahrscheinlich eine bessere Lösung, ABER dies sollte funktionieren:
var path = require('path');
// find the first module to be loaded
var topModule = module;
while(topModule.parent)
topModule = topModule.parent;
var appDir = path.dirname(topModule.filename);
console.log(appDir);
EDIT: Andreas eine bessere Lösung in den Kommentaren vorgeschlagen:
path.dirname(require.main.filename)
EDIT: eine andere Lösung von Nam Nguyen
path.dirname(process.mainModule.filename)
woo .. Ich habe das nicht kompliziert erwartet, aber ich werde es versuchen und danke. –
'path.dirname (require.main.filename)' sollte genau dasselbe tun. Beachten Sie, dass diese (wie auch die OPs) Lösung fehlschlägt, wenn Sie die App über eine andere App ausführen (PM2, für immer oder Mocha sind häufige Fälle). –
Wenn Sie dies in eine Funktion umwandeln wollen, und es an einem einzigen Ort (sagen wir 'common.js'), wird es ein Problem geben: Sie müssen den Speicherort von' common.js' kennen (relativ zum aktuellen Datei), so dass Sie 'require ('common.js')' 'verwenden können. Eigentlich wird '__dirname' das Problem niemals gut lösen. Ich denke, in Nodejs-Apps sollen Dateien * wissen, wo sie sind * und es gibt einfach keinen Grund für den Root-Pfad. –
Das funktionierte für mich .. Mit Supervisor läuft die App aus einem anderen Verzeichnis.
require('path').dirname(Object.keys(require.cache)[0])
Beispiel .. Dateien: /desktop/ya/node.js
require('./ya2/submodule')();
/desktop/ya/ya2/submodule.js
module.exports = function(){
console.log(require('path').dirname(Object.keys(require.cache)[0]))
}
$ node node.js
=> /desktop/ya
$ (from /desktop) supervisor ya/node.js
=> /desktop/ya
yeup, funktioniert wie erwartet. Danke @John Williams –
Ich habe auch eine andere Lösung gefunden: require ('path'). Dirname (process.mainModule.filename) –
- 1. Holen Sie sich einen vollständigen Dateipfad in node.js
- 2. Electron: Holen Sie sich den vollständigen Pfad der hochgeladenen Datei
- 3. Holen Sie sich den Funktionscode in Matlab?
- 4. Holen Sie sich den Typ in Flex
- 5. Holen Sie sich die neueste Datei in einem Verzeichnis, Node.js
- 6. So erhalten Sie den Anwendungspfad mit Javascript
- 7. Holen Sie sich den Spaltenindex eines Bereichs
- 8. WIN32_FIND_DATA - Holen Sie sich den absoluten Pfad
- 9. PHP: Holen Sie sich den Browser-Namen
- 10. Holen Sie sich den Rückgabewert von JOptionPane
- 11. Holen Sie sich den Prozessnamen von pid
- 12. Holen Sie sich Fotoreferenz
- 13. Wie man den Anwendungspfad in music21 einstellt
- 14. Holen Sie sich den letzten Eintrag in einer MySQL-Tabelle
- 15. Holen Sie sich den letzten Schlüssel eines Arrays in PHP
- 16. Android: Holen Sie sich den höchsten Wert in Spalte
- 17. Holen Sie sich den richtigen Cursor in CustomCursor Adapater getView()
- 18. Holen Sie sich die Variable in den Pfad eines URI
- 19. Holen Sie sich den richtigen FormatCode für numFmtID in Excel
- 20. Holen Sie sich den Fortschritt der Entpackdatei in Java
- 21. Holen Sie sich den Signalpegel in der API Java-Sound
- 22. Holen Sie sich den Typ der Klasse in generischen Parameter
- 23. Holen Sie sich den Log-Autor in Jenkins Build
- 24. Holen Sie sich den onclick von Glyphicon in EditorFor
- 25. Holen Sie sich den Unterschied zwischen zwei Niederlassungen in Git
- 26. Holen Sie sich den letzten Datensatz in Cassandra
- 27. Holen Sie sich den angemeldeten Benutzernamen in C#
- 28. Erster Anwendungspfad in Firemonkey
- 29. Holen Sie sich das Grafikkartenmodell?
- 30. Holen Sie sich die Datenbankversion in Meteor
ich meine eigene Antwort gefunden: path.dirname (process.mainModule.filename) –