Mi chiedo se esiste un modo migliore o una procedura ottimale per ottenere il percorso completo dell'applicazione in Node.js. Esempio: ho un modulo nella sotto cartella /apps/myapp/data/models/mymodel.js e vorrei ottenere il percorso completo dell'app (non il percorso completo del file), che mi restituirà /apps/myapp, come faccio? Lo so _ dirname o _file è relativo solo al file stesso ma non al percorso completo dell'app.Ottieni il percorso completo dell'applicazione in Node.js
risposta
C'è probabilmente una soluzione migliore, MA questo dovrebbe funzionare:
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 ha proposto una soluzione migliore nei commenti:
path.dirname(require.main.filename)
EDIT: un'altra soluzione di Nam Nguyen
path.dirname(process.mainModule.filename)
woo .. Non mi aspettavo che fosse complicato, ma lo proverò e grazie. –
'path.dirname (require.main.filename)' dovrebbe fare esattamente la stessa cosa. Si noti che questa soluzione (così come quella dell'OP) non funzionerà se si esegue l'app tramite un'altra app (pm2, per sempre o mocha che sono casi comuni). –
Se vuoi trasformare questa funzione in una funzione e metterla in un unico posto (ad esempio 'common.js'), ci sarà un problema: devi conoscere la posizione di' common.js' (relativa all'attuale file) in modo da poter usare 'require ('common.js')'. In realtà '__dirname' non risolverà mai bene il problema. Penso che nelle app di nodejs, i file dovrebbero sapere * dove sono * e non c'è semplicemente bisogno del percorso di root. –
Questo ha funzionato per me .. Con supervisore che esegue l'app da una directory diversa.
require('path').dirname(Object.keys(require.cache)[0])
esempio .. file: /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, funziona come previsto. Grazie a @John Williams –
ho trovato anche un'altra soluzione: require ('path'). Dirname (process.mainModule.filename) –
- 1. Ottieni un percorso completo di file in node.js
- 2. Ottieni il percorso completo dei file in PowerShell
- 3. Ottieni il nome file senza estensione dal percorso completo
- 4. Ottieni il traceback completo
- 5. Ottieni percorso completo senza nome file dal percorso che include il nome file
- 6. Ottieni percorso file completo utente per riprendere Caricamento file
- 7. Ottieni il percorso del riferimento Firebase
- 8. Ottieni il percorso completo del file durante il debug utilizzando IIS Express
- 9. Trova il percorso completo dell'interprete Python?
- 10. Ottieni percorso per NSFileWrapper
- 11. Ottieni il nome completo di una classe?
- 12. Ottieni percorso percorso dinamicamente
- 13. Come ottenere il percorso completo di StreamWriter
- 14. Aprire il file con il suo percorso completo in C++
- 15. Ottieni il percorso Assembly C#
- 16. Ottieni il percorso skin in Magento?
- 17. Ottieni il percorso da href in Javascript
- 18. Ottieni il percorso dal file aperto in Python
- 19. Modulo Node.js per sempre: ottieni il percorso di uno script in esecuzione?
- 20. Ottieni il nome della directory dal percorso completo della directory indipendentemente dalla barra finale
- 21. tarpile python senza percorso completo
- 22. Get percorso completo del file in java
- 23. Fish Interactive Shell percorso completo
- 24. Symfony2: percorso completo per azione/percorso in un controller
- 25. Ottieni il nome completo del mese in inglese
- 26. Come ottenere il percorso completo per un file in VBScript?
- 27. Come non scrivere il percorso completo del modulo in ruby?
- 28. Come eseguire il looping dei file (percorso completo) in PowerShell
- 29. Come ottenere l'URL completo con il percorso corrente in Capybara
- 30. Ottieni il nome completo di una classe Python (Python 3.3+)
ho trovato la mia risposta: path.dirname (process.mainModule.filename) –