В моей папке Svelte + Rollup src
есть две подпапки, components
и pages
. Позвольте мне описать мою мечту, и, надеюсь, кто-то может пролить свет на то, возможно ли это.
Компоненты и страницы экспортируются как их собственные файлы (у меня это работает через накопительный пакет)-plugin-multi-input ).
При попадании на страницу запрашиваются все необходимые компоненты.
JS-файлы компонентов затем кэшируются. Все будущие вызовы страниц, для которых нужны одни и те же компоненты, извлекаются из кэша.
Это разумно, или было бы лучше просто экспортировать страницы по отдельности и объединять компоненты в каждую страницу, дублируяcode?
Еще одна потенциальная идея
Создайте файл App.svelte
, который импортирует все компоненты, объединит их в объект, передайте этот объект в компонент страницы в виде реквизита, затем выполните <svelte:component this={components.Input}>
для всех компонентов внутри страницы.
App.svelte:
<script>
import { onMount } from 'svelte';
import Input from 'Input.svelte';
import Popup from 'Popup.svelte';
const components = {Input, Popup};
let page;
function getPage(url) {
/* AJAX call to fetch the page component and set it to the page variable */
}
onMount(() => getPage(location.pathname))
</script>
<svelte:component this={page} components>
Page1.svelte:
<script>
export let components;
</script>
<p>Type your name:</p>
<svelte:component this={components.Input}>
При использовании этого метода все компоненты включаются в пакет, даже если пользователь никогда не заходит на страницу, содержащую некоторые из них.