#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
и делает все передаваемые ему относительные пути относительно этого пути.