Advanced usage
August 18, 2025 ยท View on GitHub
HERE BE DRAGONS
The features described here are not meant to be used in regular libraries or end-user applications. They can be useful for frameworks, documentation sites or in special situations, but you are responsible for applying them correctly.
Proceed with caution!
transform svelte files with vite plugins
vite-plugin-svelte uses 2 Vite plugins vite-plugin-svelte:preprocess and vite-plugin-svelte:compile to preprocess and compile input.
The preprocess plugin uses enforce: pre but the compile plugin does not, giving you fine-grained control to add your own transforms
function mySvelteTransform() {
const plugin = {
name: 'vite-plugin-my-svelte-transformer',
configResolved(c) {
// optional, use the exact same id filter as vite-plugin-svelte itself
const svelteIdFilter = c.plugins.find((p) => p.name === 'vite-plugin-svelte:config').api
.filter.id;
plugin.transform.filter.id = svelteIdFilter;
},
transform: {
// if you don't use vite-plugin-svelte's filter make sure to include your own here
filter: { id: /your id filter here/ },
async handler(code, id) {
const s = new MagicString(code);
// do your transforms with s
return {
code: s.toString(),
map: s.generateMap({ hires: 'boundary', includeContent: false })
};
}
}
};
// To add your transform in the correct place use `enforce` and `transform.order`
// before preprocess
plugin.enforce = 'pre';
plugin.transform.order = 'pre';
// after preprocess but before compile
plugin.transform.order = 'pre'; // leave plugin.enforce undefined
// after compile
plugin.transform.order = 'post'; // leave plugin.enforce undefined
return plugin;
}
custom queries
Vite supports using query parameters to request different outcomes for the same file.
The following schemes are supported by vite-plugin-svelte:
raw
//get .svelte file content as a string
import content from 'File.svelte?raw';