I want to use Bootstrap (v4.5) in a Svelte (v3) project with custom theme.
The bootstrap documentation states that you can do this with scss. So I've setup Svelte with svelte-preprocess
as follows:
Added to my package.json
:
"bootstrap": "^4.5.2",
"node-sass": "^4.14.1",
"svelte-preprocess": "^4.0.10",
In my rollup.config.js
:
...
import preprocess from "svelte-preprocess";
export default {
...,
plugins: [
...,
svelte({
// enable run-time checks when not in production
dev: !production,
// we'll extract any component CSS out into
// a separate file - better for performance
css: (css) => {
css.write("public/build/bundle.css");
},
preprocess: preprocess(),
}),
In my App
component:
<style type="text/scss" global>
// Variable overrides for bootstrap
$primary: #19197c;
$secondary: #fd6400;
$light: #d8d8d8;
@import "../node_modules/bootstrap/scss/bootstrap";
</style>
Unfortunately, it looks like Svelte purges all the styles since I don't get bootstrap styling in my application. I would like to use bootstrap normalization as well as bootstrap classes. Any tips? Thanks!
In your custom. scss , you'll import Bootstrap's source Sass files. You have two options: include all of Bootstrap, or pick the parts you need. We encourage the latter, though be aware there are some requirements and dependencies across our components.
You must first import the svelte preprocess plugin, and add it inside the svelte plugin configuration. If you'd like to add options to your SASS configurations you can do so. import { scss } from 'svelte-preprocess'; svelte({ preprocess: [ scss({ /** options */ }) ] }), That's it!
Since Svelte app is basically an html page we can simply add links to Bootstrap CSS and JS in src/app.
I want to use Bootstrap (v4.5) in a Svelte (v3) project with custom theme. The bootstrap documentation states that you can do this with scss. So I've setup Svelte with svelte-preprocess as follows:
The new Svelte framework, though exciting, doesn’t have SCSS support built in. But it’s simple to add! Follow these steps to get SASS support in your Svelte app, plus get SASS syntax highlighting in VSCode. The first piece of this puzzle is to get your project able to build with SASS enabled.
In Svelte, styles are scoped by default to prevent collisions. This is great and all, but there are plenty of cases where it is practical to write global styles. Here is an example of making a <p> element globally white when it has the .dark-mode selector:
Here's how we start with Svelte. The easiest and best way to get Svelte up and running straight away is to install their master template and work from there. This will bring everything you need into the project, setup the basic folder structure and create your first component for you.
I actually found a much easier way, using Svelte Preprocess! All you need to do, in App.svelte
<!-- app.svelte content -->
...
<!-- ... -->
<style lang="scss" global>
@import "path/to/your/scss/files";
</style>
Just note that if you use "./..."
in the @import
, that means it's referencing local files. If there is no "./..."
(so just plain "name"
, then it will import from node_modules
.
And that's it! If you wanted to use the settings, all you would need to do is
I figured out how to get this working. You have to separately process the sass outside of Svelte, using rollup-plugin-scss
, so that the classes are not purged.
In rollup.config.js
:
...
import scss from "rollup-plugin-scss";
export default {
...,
plugins: [
...,
svelte({
// enable run-time checks when not in production
dev: !production,
emitCss: true
}),
scss(),
...,
Create a new file called main.scss
:
// Variable overrides for bootstrap
$primary: #19197c;
$secondary: #fd6400;
$light: #d8d8d8;
@import "../node_modules/bootstrap/scss/bootstrap";
In main.js
:
import "./main.scss";
import App from "./App.svelte";
const app = new App({
target: document.body,
props: {},
});
export default app;
That's it!
I usually use <svelte:head>
to set global stuff.
Example
<svelte:head>
<!-- Google Font -->
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<style>
/* Global CSS via SASS */
@import '../../_assets/sass/global';
._another_global_stuff {
z_index: 1001;
}
</style>
</svelte:head>
And rollup setup is very simple.
Example
Modules required:
let plugins = [
//...
svelte({
compilerOptions: {
dev: !production
},
preprocess: sveltePreprocess({
sourceMap: !production,
defaults: {
style: 'scss'
},
postcss: {
plugins: [
require('autoprefixer')()
]
}
}),
emitCss: true
}),
css({output: 'bundle.css'}),
//...
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With