Почему require () не требует абсолютного пути, а express.static () делает? - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь запустить свой скрипт index.js вне директории проекта. Моя структура проекта выглядит следующим образом:

    app
      - config
          - config.js
      - public
          - index.html
      - src
          - index.js

Теперь, когда я запускаю свой src / index.js из папки моего приложения, require () может разрешить относительные пути

    const config = require(`../config/config`); 

С другой стороны, express.static не может разрешить такие относительные пути.

    e.g. app.use(express.static("../public"));

Почему мне нужно использовать path.join и получить абсолютный путь?

1 Ответ

2 голосов
/ 19 октября 2019

require() работает __dirname, который не зависит от текущего каталога, когда ваше приложение было загружено. Это всегда каталог, в котором находится модуль, поэтому он согласован.

express.static() при использовании с относительными путями использует каталог, из которого было запущено основное приложение, поэтому если вы используете относительные пути, его поведениеварьируется в зависимости от того, как вы запускаете приложение.

Из документа Express для обслуживания статических файлов :

Однако путь, который вы указываете для Express. Статическая функция относится к каталогу, из которого вы запускаете процесс вашего узла. Если вы запускаете экспресс-приложение из другого каталога, безопаснее использовать абсолютный путь к каталогу, который вы хотите обслуживать

Итак, если вы хотите, чтобы каталог был относительным для модуля, вы должны вручнуюобъедините ваш путь с __dirname, чтобы получить полный путь, как вы обнаружили.

...