Относительный путь записи файловой системы в модуле
У меня есть исполняемый файл 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
Есть ли способ сохранить файл, независимый от всех этих переменных?
Ответы
Ответ 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
.