Относительный путь записи файловой системы внутри модуля

У меня есть исполняемый узел/скрипт javascript с логическим значением отладки, если установлено значение true, будет записана пара файлов. Этот исполняемый файл также является модулем узла. В зависимости от рабочего каталога пользователя, запускающего скрипт, кажется, что функция не может найти каталог для записи файлов.

Модуль устроен так

output/
lib/
    helpers.js
index.js

Мое первоначальное рассуждение состояло в том, чтобы путь был.

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

Однако это работает при запуске скрипта из папки node_module.

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

Как это

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

Это становится еще более запутанным, если модули используются в другом исполняемом файле, который использует библиотеку.

node ./my_app/run.js

Есть ли способ сохранить файл независимо от всех этих переменных?


person ThomasReggi    schedule 06.03.2013    source источник


Ответы (1)


Если я правильно понимаю вопрос, вы всегда хотите писать по пути относительно текущего скрипта. Чтобы получить имя каталога, в котором находится выполняющийся в данный момент скрипт, вы можете использовать __dirname следующим образом:

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

При этом я не считаю хорошей практикой записывать файлы внутри вашего каталога node_modules. Я бы рекомендовал, чтобы ваш модуль требовал полного пути к файлу где-то еще в файловой системе. Если вызывающая сторона хочет записать в выходной каталог в своем собственном дереве проекта, вы можете снова использовать тот же прием __dirname.

person David Weldon    schedule 06.03.2013