Как отмечалось в комментариях, у вас проблемы с абсолютными и относительными путями и тем, как узел обрабатывает текущий рабочий каталог.
Суть вашей проблемы лучше всего продемонстрировать, выполнив следующее:
const path = require('path');
console.log(path.resolve('foo'));
console.log(path.resolve('./foo'));
В последнем случае узел разрешает относительный путь относительно текущего рабочего каталога процесса узла. CWD может быть подтвержден с помощью:
console.log(process.cwd());
CWD процесса узла определяется с того места, где вы вызываете узел.
Например, если у вас следующая файловая структура:
/
└──projects/
└──app/
├──js/
│ └──dep.js
├──index.js
└──test.txt
index.js содержимое:
const fs = require('fs');
console.log(process.cwd());
console.log(fs.readFileSync('./test.txt'));
require('./js/dep.js');
dep.js содержимое:
const fs = require('fs');
console.log(process.cwd());
console.log(fs.readFileSync('./test.txt'));
Если вы перешли на /projects/app
и запустили node index.js
, вы увидите, что программа успешно распечатывает cwd и содержимое test.txt дважды. Это демонстрирует, как cwd согласован для разных исходных файлов, используемых программой.
Если вы перешли на /app
и запустили node app/index.js
, вы увидите сбой программы с ошибкой ENOENT. Это демонстрирует, как запуск вашей программы из разных мест меняет cwd.