2013-03-06 16 views
16

Mam wykonywalny skrypt węzła/javascript, który ma wartość logiczną debugowania, jeśli ustawione na true, kilka plików zostanie zapisanych. Ten plik wykonywalny jest także modułem węzła. W zależności od katalogu roboczego użytkownika uruchamiającego skrypt wydaje się, że funkcja nie może znaleźć katalogu do zapisania plików.Względna ścieżka zapisu systemu plików w module

Moduł jest zorganizowany jak ten

output/ 
lib/ 
    helpers.js 
index.js 

moje oryginalne rozumowanie byłoby mieć ścieżka być.

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

Jednak to działa po uruchomieniu skryptu od wewnątrz folderu node_module

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

Ci się to

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

ten staje się jeszcze bardziej skomplikowane, gdy moduły są wykorzystywane w innym pliku wykonywalnego, który korzysta z biblioteki.

node ./my_app/run.js 

Czy istnieje sposób na zapisanie pliku niezależnie od wszystkich tych zmiennych?

Odpowiedz

42

Jeśli dobrze rozumiem pytanie, zawsze chcesz pisać do ścieżki w stosunku do bieżącego skryptu. Aby uzyskać nazwę katalogu, w którym znajduje się dany skrypt aktualnie wykonywany w, można użyć __dirname tak:

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); 
}; 

Mając na uwadze powyższe, nie sądzę, że to dobra praktyka, aby być zapisywania plików wewnątrz katalogu node_modules . Zalecam, aby moduł wymagał pełnej ścieżki do pliku w innym miejscu systemu plików. Jeśli osoba wywołująca chce napisać do katalogu wyjściowego w swoim drzewie projektu, można ponownie użyć tej samej sztuczki __dirname.

Powiązane problemy