Aus dem Quell-Repository gerendert; Überschriften, Beispiele, Code, Tabellen, Links und Bilder bleiben erhalten.
Bootstrap 6 with Vite
Set up a Bootstrap 6 project bundled with Vite. Requires Node.js and terminal familiarity.
Workflow
- [ ] Step 1: Set up npm and install dependencies
- [ ] Step 2: Create the project structure
- [ ] Step 3: Configure Vite
- [ ] Step 4: Import Bootstrap's CSS and JS
- [ ] Step 5: Verify
Step 1: Set up npm and install dependencies
- Create the project and initialize npm:
mkdir my-project && cd my-project
npm init -y- Install Vite:
npm i --save-dev vite- Install Bootstrap and its optional peer dependencies (omit
@floating-ui/domif not using menus/popovers/tooltips; omitvanilla-calendar-proif not using the datepicker):
npm i --save bootstrap@6.0.0-alpha.1 @floating-ui/dom vanilla-calendar-pro- Install Sass to compile Bootstrap's source:
npm i --save-dev sassStep 2: Create the project structure
mkdir {src,src/js,src/scss}
touch src/index.html src/js/main.js src/scss/styles.scss vite.config.jsTarget layout:
my-project/
├── src/
│ ├── js/
│ │ └── main.js
│ ├── scss/
│ │ └── styles.scss
│ └── index.html
├── package-lock.json
├── package.json
└── vite.config.jsStep 3: Configure Vite
vite.config.js:
import path from 'path'
export default {
root: path.resolve(__dirname, 'src'),
build: {
outDir: '../dist'
},
server: {
port: 8080
}
}src/index.html— load the entry module:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap w/ Vite</title>
<script type="module" src="./js/main.js"></script>
</head>
<body>
<div class="container py-4 px-3 mx-auto">
<h1>Hello, Bootstrap and Vite!</h1>
<button class="btn-solid theme-primary">Primary button</button>
</div>
</body>
</html>package.json— add the start script:
{
"scripts": {
"start": "vite",
"test": "echo \"Error: no test specified\" && exit 1"
}
}- Start Vite:
npm startStep 4: Import Bootstrap's CSS and JS
src/scss/styles.scss— import the source Sass with@use(never@import):
// Import all of Bootstrap's CSS
@use "bootstrap/scss/bootstrap";To customize, override Bootstrap's CSS token maps ($root-tokens, $*-tokens) — see Customize › Sass. Token names are written unprefixed in Sass; Bootstrap's dist/CDN CSS adds the --bs- prefix via PostCSS, so compiling the source yourself keeps them unprefixed.
src/js/main.js— load the CSS and import Bootstrap's JS. Floating UI and Vanilla Calendar Pro are imported automatically through Bootstrap:
// Import our custom CSS, then all of Bootstrap’s JS
import '../scss/styles.scss'
import * as bootstrap from 'bootstrap'Import only the plugins you need to keep bundle sizes down:
import { Tooltip, Toast, Popover } from 'bootstrap'Step 5: Verify
- Run
npm startand openhttp://localhost:8080— the.containerand.btn-solid.theme-primarybutton should be styled. - Confirm the browser console is free of module-resolution errors (Bootstrap, Floating UI, Vanilla Calendar Pro).
- Trigger a JS component (tooltip/dialog) to confirm the JS bundle works.
- Bootstrap 6 requires a browser that supports
oklch()andcolor-mix().
For an optimized build that imports only the parts of Bootstrap you use, see the twbs/examples Vite project.

