2013-03-06 32 views
16

Bir hata ayıklama boole sahip bir çalıştırılabilir node/javascript komut dosyası var, true olarak ayarlanmışsa, birkaç dosya yazılır. Bu yürütülebilir dosya da düğüm modülüdür. Komut dosyasını çalıştıran kullanıcının çalışma dizinine bağlı olarak, işlevin dosyaları yazmak için dizini bulamıyor gibi görünüyor.Göreli dosya sistemi Modül içindeki yazma yolu

modül yolu olmak zorunda olacaktır bu

output/ 
lib/ 
    helpers.js 
index.js 

Benim asıl akıl gibi yapılandırılmıştır. node_module klasörü içinde komut dosyası çalıştırılırken

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

Ancak bu işleri modülleri başka yürütülebilir dosya olarak kullanılıyorsa, bu daha da kafa karıştırıcı alır bu

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

gibi

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

o kütüphaneyi kullanır.

node ./my_app/run.js 

Dosyayı, tüm bu değişkenlerden bağımsız olarak kaydetmenin bir yolu var mı?

cevap

42

Soruyu doğru anlıyorsam, her zaman geçerli komut dosyasına göre bir yol yazmak istersiniz. Şu anda yürütülen komut dosyası içinde bulunduğu dizinin adını almak için, şöyle __dirname kullanabilirsiniz:

söyleniyor
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); 
}; 

, ben senin node_modules dizinin içindeki dosyaları yazma iyi bir uygulamadır olduğunu sanmıyorum . Modülünüzün dosya sisteminde başka bir dosyaya tam yol gerektirmesini öneririm. Arayan kendi proje ağacında bir çıkış dizinine yazmak isterse, yine aynı __dirname numarasını kullanabilirsiniz.