Quasi tutte le funzioni (ad eccezione di require
) che accettano percorsi di file come argomento, ad un certo punto utilizzeranno funzioni dal modulo fs
per leggere o scrivere su di esse.
Node.js documentation for fs module dice:
percorso relativo al nome del file può essere utilizzato, ricorda, tuttavia, che questo percorso sarà relativo process.cwd().
Quando ci pensi, richiederebbe trucchi importanti per far sì che queste funzioni si comportino in modo diverso. Dopo tutto, le funzioni fs sono normali Javascript e non hanno accesso speciale alle informazioni sul chiamante. L'unico accesso a __dirname
potrebbe essere il __dirname
del proprio modulo (il modulo fs di base).
Il fatto che il require
funzione di può percorsi resolve relativa alla corrente __dirname
, senza specificare esplicitamente, è perché require
è una funzione unica per ogni singolo file appare in. In questo modo, si ha accesso alla corrente specifiche del modulo, e in particolare il suo percorso.
La ragione per cui il codice capita di lavorare è che attualmente, il app.js
(o simile) il codice di cui sopra appare in sembra essere nella stessa directory come quello che attualmente è process.cwd()
. Cioè Avviare l'app con node app.js
funzionerebbe, mentre l'avvio dell'app con node myappdir/app.js
(eseguito dalla sua directory padre) non funzionava. process.cwd()
sarebbe diverso.
Se si tiene presente che i percorsi relativi verranno risolti tramite process.cwd()
, è possibile utilizzare la sintassi più breve. In alcuni casi può essere un vantaggio. Rende il tuo codice dipendente da come viene chiamato. Personalmente preferisco usare __dirname
, perché è un po 'più trasparente su ciò che sta accadendo, e i percorsi relativi coerenti con i percorsi che si usano in una dichiarazione require
per lo stesso file.
fonte
2013-05-24 08:06:35
Credo che l'ultimo modo di definire le posizioni si interromperà su Windows. Sto usando il 90% di '__dirname + '/ folder'' è l'approccio più sicuro (senza prove concrete, solo esperienze casuali che fanno casino con il nodo in Windows). –