Заготовка полноценного проекта с маршрутизацией.
Исходные файлы находятся внутри папки /src. Готовый бандл попадает в папку /dist.
src/
pages/ — отдельные страницы приложения
components/ — более мелкие компоненты
scss/ — глобальные стилей для всего приложения
img/ и fonts/ — статические файлы, которые при сборке копируются в соответствующие папки внутри /dist
App.svelte — основной компонент приложения
index.html — базовая html-страница, в которую встраивается приложение
main.js — entry-point для Вебпака; инициализирует основной компонент приложения и интегрирует его в index.html
В качестве роутера используется svelte-routing. Пути настраиваются в файле src/App.svelte c помощью компонентов <Router> и <Route>:
<Router>
<Route path="/"><Index /></Route>
<Route path="/about/"><About /></Route>
<Route path="*"><NotFound /></Route>
</Router>
Для навигации между страницами приложения вместо нативных ссылок <a href="…"></a> используются компоненты <Link>:
<Link to="/">Главная</Link>
<Link to="about">О компании</Link>
<Link to="contacts">Контакты</Link>
Пути к статическим файлам должны начинаться со слеша: например, src="/img/logo.jpg". Это необходимо, чтобы приложение обращалось к одной и той же папке с любой страницы сайта. Если не добавить слеш, браузер будет учитывать вложенность УРЛ: например, искать изображения по адресу example.com/subfolder/img вместо example.com/img. В результате ни один из статических файлов не будет найден — даже main.js, файл самого приложения: пользователь увидит пустую страницу.
Адрес папки со статическими файлами указывается в переменной STATIC_BASE="/assets/ — со слешами в начале и в конце. Это значение используется приложением внутри тега <base href="…"> на каждой странице.
В переменной ROUTER_BASE указывается путь, содержащийся в УРЛ приложения. Например, если сайт работает по адресу example.com/my-app, в качестве значения указывается ROUTER_BASE="my-app". Этот параметр передается в качестве basepath для роутера.
Это необходимо для корректной обработки статических файлов у страниц с вложенными УРЛ-ами: например, чтобы изображения на странице example.com/subfolder/about запрашивались сервером с адреса example.com/subfolder/img, а не example.com/subfolder/about/img (если <base> не указан) или example.com/img (если <base href="/">).
В качестве сервера используется sirv-cli. Перед запуском необходимо собрать бандл с помощью npm run build и указать значение переменной окружения PORT: PORT=3000 npm start.
Проект собирается с помощью Вебпака. Переменные окружения, необходимые при сборке, указываются в .env-файле, расположенном в корне проекта. Переменные, которые необходимо передать в сам код приложения, дополнительно отмечаются в настройках плагина webpack.DefinePlugin({…}) внутри файла webpack.config.js.