Почему относительные пути в Node.js для модуля FS и требуется точка в разных местах?

#javascript #node.js #path #require #fs

Вопрос:

Когда мы запускаем сервер на узле JS, мы должны использовать пути относительно того каталога, в котором мы запустили node . Чтобы решить эту проблему, мы должны использовать path модуль следующим образом:

 fs.createReadStream(path.join(__dirname, '..', '..', 'data', 'someData.csv'))
 

Но когда мы используем require , мы можем просто указать относительный путь к файлу, в котором мы нуждаемся, без необходимости учитывать node , откуда запускается:

 const {data} = require('../../models/data.model');
 

Не могли бы вы, пожалуйста, объяснить: почему это так работает?

Ответ №1:

fs Модуль обрабатывает относительные пути относительно рабочего каталога процесса, например, где он запущен. Вы можете использовать process.cwd() , чтобы выяснить, где это находится.

Когда дело доходит до require этого , это немного особый случай. Когда ваш скрипт/модуль будет инициализирован и вызван, NodeJS создаст совершенно новую require функцию. Подробнее об этом вы можете прочитать здесь.

В принципе, у вашего модуля есть свой собственный require , который знает __dirname и делает все передаваемые ему относительные пути относительно этого пути.