Принудительное включение части хоста в BASE url при использовании сервера разработки Vite

У меня есть несколько нетрадиционная установка, в которой я использую Vite/Vue SSR сервер для рендеринга шаблонов за сервером Django. Т.е. Django вызывает node, получает html и отправляет его обратно в браузер. Я столкнулся с проблемой, что сервер Vite не уважает полный BASE url, как https://bar.com/foo/ (он вырезает часть origin, что является документированным поведением). Однако без части origin сгенерированный html и другие активы содержат урлы, которые браузер рассматривает как относительные к происхождению сервера Django, что, очевидно, не работает. Есть ли способ заставить Vite включить origin в BASE url, или мой единственный вариант - проксировать обратно на сервер Vite из Django?

Я добился этого, добавив тег <base>, позаботившись о том, чтобы поместить его сразу после тега <head>. В противном случае Vite вставлял свой тег клиентского сценария перед тегом <base>, а тег <base> применялся только к элементам, которые шли после него. В документации MDN для <base> есть явное предупреждение о необходимости помнить об этом:

Предупреждение: Элемент <base> должен иметь атрибут href, атрибут target или оба атрибута. Если хотя бы один из этих атрибутов указан, элемент <base> должен располагаться перед другими элементами со значениями атрибутов которые являются URL, например, атрибут href элемента <link>.

Для добавления тега <base> перед тегом клиентского скрипта Vite я использовал плагин Vite transformIndexHtml:

plugins: [
  vue(),
  {
    name: 'vite-client-script-transform',
    transformIndexHtml(html: string) {
      return html.replace(
        '<head>', 
        `<head><base href="http://localhost:5173" />`,
      )
    }
  }        
],
Вернуться на верх