Относительный путь записи файловой системы в модуле - программирование
Подтвердить что ты не робот

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

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

Модуль структурирован таким образом

output/
lib/
    helpers.js
index.js

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

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

Однако это работает при запуске script из папки 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

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

4b9b3361

Ответ 1

Если я правильно понял вопрос, вы всегда должны писать путь к текущему script. Чтобы получить имя каталога, в котором находится текущий исполняемый script, вы можете использовать __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.