Interested in sprinkling Svelte into an existing application? This is how I did it.
1. Scaffold a Svelte Application in the Existing Application
First, I ran the following command in my existing application:
npx degit sveltejs/template svelte-componentsThis will scaffold a Svelte project in a new directory called svelte-components and install its dependencies. You can do this wherever you want, but I recommend putting this directory where it won't be served by the web server.
2. A HelloWorld Component
Inside of svelte-components/src, create the file HelloWorld.svelte with the following contents:
<p>Hello World!</p>Next, add the following to svelte-components/src/main.js:
import HelloWorld from './HelloWorld.svelte';
new HelloWorld({
target: document.querySelector('#hello-world-container'),
});This assumes you have an element with an id of hello-world-container in your existing application. The HelloWorld Svelte component will get rendered there.
3. Change the JS and CSS Build Paths in rollup.config.js
Inside of rollup.config.js, change the file property and specify where you want the JavaScript to be built to:
output: {
// ...
file: '../dist/svelte-bundle.js';
}Similarly, change where you want the CSS to be built to:
svelte({
// ...
css: css => {
css.write('../dist/svelte-bundle.css');
},
});4. Link to the Built JS and CSS from the Existing Application
Create a script tag for svelte-bundle.js and a link tag for svelte-bundle.css in your existing application. For example:
<link href="/dist/svelte-bundle.css" rel="stylesheet" />
<script defer src="/dist/svelte-bundle.js"></script>This blog is built using Jekyll. I did the following so that users will get the latest assets on every Jekyll build.
<link
href="/dist/svelte-bundle.css?{% raw %}{{site.time | date: '%s%N'}}{% endraw %}"
rel="stylesheet"
/>
<script
defer
src="/dist/svelte-bundle.js?{% raw %}{{site.time | date: '%s%N'}}{% endraw %}"
></script>The site.time variable is the time when the site was built (when you run the jekyll command).
4. Run your Application
In development, run npm run dev in svelte-components and run your application as usual. Svelte uses rollup.js and npm run dev will use Rollup to watch for file changes and rebuild svelte-bundle.css and svelte-bundle.js.
5. Building for Production
When running npm run dev, our svelte-bundle.css and svelte-bundle.js files won't be minified. To do that for production, run npm run build. Manually doing this for every production build will probably get annoying, so add this to your deployment script.
6. Clean Up
Because I sprinkled Svelte components into an existing application, I didn't need the svelte-components/public directory so I deleted it. The files that I kept include:
svelte-components/src/HelloWorld.sveltesvelte-components/src/main.jssvelte-components/rollup.config.jssvelte-components/package.jsonsvelte-components/package-lock.json
Hope that helps! Reach out to me on Twitter @iamdtang if you have any questions.

