2013-03-06 9 views
16

Ho un nodo eseguibile/script javascript con un booleano di debug, se impostato su true verranno scritti un paio di file. Questo eseguibile è anche un modulo nodo. A seconda della directory di lavoro dell'utente che esegue lo script, sembra che la funzione non riesca a trovare la directory in cui scrivere i file.Percorso di scrittura del file system relativo all'interno del modulo

Il modulo è strutturato in questo modo

output/ 
lib/ 
    helpers.js 
index.js 

Il mio ragionamento originale sarebbe quello di avere il percorso sia.

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    fs.writeFileSync("./output/"+filename, data); 
}; 

Tuttavia questo funziona quando si esegue lo script all'interno della cartella node_module

fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data); 

Ti piace questa

node ./my_app/node_modules/the_module/index.js 

Questo diventa ancora più confusa se i moduli viene utilizzato in un altro file eseguibile che usa la biblioteca.

node ./my_app/run.js 

C'è un modo per salvare il file indipendente da tutte queste variabili?

risposta

42

Se ho compreso correttamente la domanda, si desidera scrivere sempre su un percorso relativo allo script corrente. Per ottenere il nome della directory che lo script in esecuzione risiede in, è possibile utilizzare __dirname in questo modo:

var path = require('path'); 

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    var file = path.join(__dirname, 'output', filename); 
    fs.writeFileSync(file, data); 
}; 

Detto questo, non credo che sia buona pratica di scrivere file all'interno della directory node_modules . Mi raccomando che il tuo modulo richieda il percorso completo di un file da qualche altra parte nel file system. Se il chiamante desidera scrivere in una directory di output nella propria struttura di progetto, è possibile utilizzare nuovamente lo stesso trucco __dirname.