Backend интеграция
Заметка
Если вы хотите сёрвить HTML используя традиционный backend (например, Rails, Laravel), но хотите использовать Vite для обработки ресурсов (assets), то посмотрите существующий список интеграций в Awesome Vite.
Если Вам нужна кастомная интеграция, вы можете следовать инструкциям, описанным в этом руководстве, чтобы настроить всё самостоятельно.
В вашем Vite config файле, настройте entry и включите build manifest:
// vite.config.js export default defineConfig({ build: { // generate manifest.json in outDir manifest: true, rollupOptions: { // перепишите дефолтный .html entry input: '/path/to/main.js' } } })
Если вы не отключали module preload polyfill, вам также нужно заимпортить полифилы в вашем entry
// добавьте в начале вашего app entry import 'vite/modulepreload-polyfill'
Для разработки, вставьте следующий код в ваш server's HTML шаблон (заменить
http://localhost:3000
с локальным URL, где запущен Vite):<!-- if development --> <script type="module" src="http://localhost:3000/@vite/client"></script> <script type="module" src="http://localhost:3000/main.js"></script>
Также убедитесь, что сервер сконфигурирован для обработки статичных ресурсов (assets) в рабочей директории Vite, иначе assets, такие, как картинки не будут правильно грузиться.
Заметьте, если вы используете React с
@vitejs/plugin-react-refresh
, вам также надо будет добавить это до вышеупомянутого скрипта, поскольку плагин не может изменять HTML код, который вы сёрвите:<script type="module"> import RefreshRuntime from 'http://localhost:3000/@react-refresh' RefreshRuntime.injectIntoGlobalHook(window) window.$RefreshReg$ = () => {} window.$RefreshSig$ = () => (type) => type window.__vite_plugin_react_preamble_installed__ = true </script>
Для production: после запуска
vite build
,manifest.json
файл будет сгенерирован рядом с другими asset файлами. Примерный manifest файл выглядит вот так:{ "main.js": { "file": "assets/main.4889e940.js", "src": "main.js", "isEntry": true, "dynamicImports": ["views/foo.js"], "css": ["assets/main.b82dbe22.css"], "assets": ["assets/asset.0ab0f9cd.png"] }, "views/foo.js": { "file": "assets/foo.869aea0d.js", "src": "views/foo.js", "isDynamicEntry": true, "imports": ["_shared.83069a53.js"] }, "_shared.83069a53.js": { "file": "assets/shared.83069a53.js" } }
- Manifest имеет структуру
Record<name, chunk>
- Для entry или dynamic entry chunks, ключ - это относительный src путь из корня проекта.
- Для не entry chunks, ключ - это base name сгенерированного файла с префиксом
_
. - Chunks будут содержать информацию о их статичных и динамичных импортах (оба ключа, которые мапятся с соответствующим чанком в манифесте), и также это соответствует CSS и asset файлам (если они есть).
Вы можете использовать этот файл для рендера ссылок или preload directives с хэшированными названиями файлов (запомните: приведённый здесь синтаксис только для ознакомления, замените его своим server templating language):
<!-- if production --> <link rel="stylesheet" href="/assets/{{ manifest['main.js'].css }}" /> <script type="module" src="/assets/{{ manifest['main.js'].file }}"></script>
- Manifest имеет структуру