require()
работает __dirname
, который не зависит от текущего каталога, когда ваше приложение было загружено. Это всегда каталог, в котором находится модуль, поэтому он согласован.
express.static()
при использовании с относительными путями использует каталог, из которого было запущено основное приложение, поэтому если вы используете относительные пути, его поведениеварьируется в зависимости от того, как вы запускаете приложение.
Из документа Express для обслуживания статических файлов :
Однако путь, который вы указываете для Express. Статическая функция относится к каталогу, из которого вы запускаете процесс вашего узла. Если вы запускаете экспресс-приложение из другого каталога, безопаснее использовать абсолютный путь к каталогу, который вы хотите обслуживать
Итак, если вы хотите, чтобы каталог был относительным для модуля, вы должны вручнуюобъедините ваш путь с __dirname
, чтобы получить полный путь, как вы обнаружили.