# rollup-plugin-svelte **Repository Path**: mirrors_sveltejs/rollup-plugin-svelte ## Basic Information - **Project Name**: rollup-plugin-svelte - **Description**: Compile Svelte components with Rollup - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-26 - **Last Updated**: 2025-08-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > Undecided yet what bundler to use? We suggest using [SvelteKit](https://kit.svelte.dev) or Vite with [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/). # rollup-plugin-svelte [![CI](https://github.com/sveltejs/rollup-plugin-svelte/workflows/CI/badge.svg)](https://github.com/sveltejs/rollup-plugin-svelte/actions) Compile Svelte components. ## Installation ```bash npm install --save-dev svelte rollup-plugin-svelte ``` Note that we need to install Svelte as well as the plugin, as it's a 'peer dependency'. ## Usage ```js // rollup.config.js import svelte from 'rollup-plugin-svelte'; import resolve from '@rollup/plugin-node-resolve'; export default { input: 'src/main.js', output: { file: 'public/bundle.js', format: 'iife' }, plugins: [ svelte({ // By default, all ".svelte" files are compiled extensions: ['.my-custom-extension'], // You can restrict which files are compiled // using `include` and `exclude` include: 'src/components/**/*.svelte', // Optionally, preprocess components with svelte.preprocess: // https://svelte.dev/docs#compile-time-svelte-preprocess preprocess: { style: ({ content }) => { return transformStyles(content); } }, // Emit CSS as "files" for other plugins to process. default is true emitCss: false, // Warnings are normally passed straight to Rollup. You can // optionally handle them here, for example to squelch // warnings with a particular code onwarn: (warning, handler) => { // e.g. don't warn on elements, cos they're cool if (warning.code === 'a11y-distracting-elements') return; // let Rollup handle all other warnings normally handler(warning); }, // You can pass any of the Svelte compiler options compilerOptions: { // By default, the client-side compiler is used. You // can also use the server-side rendering compiler generate: 'ssr', // ensure that extra attributes are added to head // elements for hydration (used with generate: 'ssr') hydratable: true, // You can optionally set 'customElement' to 'true' to compile // your components to custom elements (aka web elements) customElement: false } }), // see NOTICE below resolve({ browser: true, exportConditions: ['svelte'], extensions: ['.svelte'] }), // ... ] } ``` > **NOTICE:** You will need additional Rollup plugins.
Alone, this plugin translates Svelte components into CSS and JavaScript files.
You will need to include [`@rollup/plugin-node-resolve`](https://www.npmjs.com/package/@rollup/plugin-node-resolve) – and probably [`@rollup/plugin-commonjs`](https://www.npmjs.com/package/@rollup/plugin-commonjs) – in your Rollup config. ## Preprocessing and dependencies If you are using the `preprocess` feature, then your callback responses may — in addition to the `code` and `map` values described in the Svelte compile docs — also optionally include a `dependencies` array. This should be the paths of additional files that the preprocessor result in some way depends upon. In Rollup 0.61+ in watch mode, any changes to these additional files will also trigger re-builds. ## `svelte` exports condition If you're importing a component from your node_modules folder, and that component's `package.json` has a `"svelte"` property in its `exports` condition... ```js { "name": "some-component", // this means 'some-component' resolves to 'some-component/src/SomeComponent.svelte' "exports": { ".": { "svelte": "./src/MyComponent.svelte" } } } ``` ...then this plugin together with `@rollup/plugin-node-resolve` (and its `exportConditions` option containing the `'svelte'` condition – see configuration example above) will ensure that your app imports the *uncompiled* component source code. That will result in a smaller, faster app (because code is deduplicated, and shared functions get optimized quicker), and makes it less likely that you'll run into bugs caused by your app using a different version of Svelte to the component. Conversely, if you're *publishing* a component to npm, you should ship the uncompiled source (together with the compiled distributable, for people who aren't using Svelte elsewhere in their app) and include the `"svelte"` property in the `exports` of your `package.json`. If you are publishing a package containing multiple components, you can create an `index.js` file that re-exports all the components, like this: ```js export { default as Component1 } from './Component1.svelte'; export { default as Component2 } from './Component2.svelte'; ``` and so on. Then, in `package.json`, set the `svelte` condition to point to this `index.js` file. Or you may create an export for each individual Svelte file. Using a single `index.js` which exports all files will allow multiple components to be imported with a single line, but may load more slowly during development. An export per file may load more quickly during development but require a separate import statement for each file. ## Extracting CSS By default (when `emitCss: true`) the CSS styles will be emitted into a virtual file, allowing another Rollup plugin – for example, [`rollup-plugin-css-only`](https://www.npmjs.com/package/rollup-plugin-css-only), [`rollup-plugin-postcss`](https://www.npmjs.com/package/rollup-plugin-postcss), etc. – to take responsibility for the new stylesheet. In fact, emitting CSS files _requires_ that you use a Rollup plugin to handle the CSS. Otherwise, your build(s) will fail! This is because this plugin will add an `import` statement to import the emitted CSS file. It's not valid JS to import a CSS file into a JS file, but it allows the CSS to be linked to its respective JS file and is a common pattern that other Rollup CSS plugins know how to handle. If you set `emitCss: false` and your Svelte components contain `