Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Vite 8 (Rolldown-powered) configuration, plugin API, SSR, library mode, and Environment API reference.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/core-features.md
1---2name: vite-features3description: Vite-specific import patterns and runtime features4---56# Vite Features78## Glob Import910Import multiple modules matching a pattern:1112```ts13const modules = import.meta.glob('./dir/*.ts')14// { './dir/foo.ts': () => import('./dir/foo.ts'), ... }1516for (const path in modules) {17modules[path]().then((mod) => {18console.log(path, mod)19})20}21```2223### Eager Loading2425```ts26const modules = import.meta.glob('./dir/*.ts', { eager: true })27// Modules loaded immediately, no dynamic import28```2930### Named Imports3132```ts33const modules = import.meta.glob('./dir/*.ts', { import: 'setup' })34// Only imports the 'setup' export from each module3536const defaults = import.meta.glob('./dir/*.ts', { import: 'default', eager: true })37```3839### Multiple Patterns4041```ts42const modules = import.meta.glob(['./dir/*.ts', './another/*.ts'])43```4445### Negative Patterns4647```ts48const modules = import.meta.glob(['./dir/*.ts', '!**/ignored.ts'])49```5051### Custom Queries5253```ts54const svgRaw = import.meta.glob('./icons/*.svg', { query: '?raw', import: 'default' })55const svgUrls = import.meta.glob('./icons/*.svg', { query: '?url', import: 'default' })56```5758## Asset Import Queries5960### URL Import6162```ts63import imgUrl from './img.png'64// Returns resolved URL: '/src/img.png' (dev) or '/assets/img.2d8efhg.png' (build)65```6667### Explicit URL6869```ts70import workletUrl from './worklet.js?url'71```7273### Raw String7475```ts76import shaderCode from './shader.glsl?raw'77```7879### Inline/No-Inline8081```ts82import inlined from './small.png?inline' // Force base64 inline83import notInlined from './large.png?no-inline' // Force separate file84```8586### Web Workers8788```ts89import Worker from './worker.ts?worker'90const worker = new Worker()9192// Or inline:93import InlineWorker from './worker.ts?worker&inline'94```9596Preferred pattern using constructor:9798```ts99const worker = new Worker(new URL('./worker.ts', import.meta.url), {100type: 'module',101})102```103104## Environment Variables105106### Built-in Constants107108```ts109import.meta.env.MODE // 'development' | 'production' | custom110import.meta.env.BASE_URL // Base URL from config111import.meta.env.PROD // true in production112import.meta.env.DEV // true in development113import.meta.env.SSR // true when running in server114```115116### Custom Variables117118Only `VITE_` prefixed vars exposed to client:119120```121# .env122VITE_API_URL=https://api.example.com123DB_PASSWORD=secret # NOT exposed to client124```125126```ts127console.log(import.meta.env.VITE_API_URL) // works128console.log(import.meta.env.DB_PASSWORD) // undefined129```130131### Mode-specific Files132133```134.env # always loaded135.env.local # always loaded, gitignored136.env.[mode] # only in specified mode137.env.[mode].local # only in specified mode, gitignored138```139140### TypeScript Support141142```ts143// vite-env.d.ts144interface ImportMetaEnv {145readonly VITE_API_URL: string146}147148interface ImportMeta {149readonly env: ImportMetaEnv150}151```152153### HTML Replacement154155```html156<p>Running in %MODE%</p>157<script>window.API = "%VITE_API_URL%"</script>158```159160## CSS Modules161162Any `.module.css` file treated as CSS module:163164```ts165import styles from './component.module.css'166element.className = styles.button167```168169With camelCase conversion:170171```ts172// .my-class -> myClass (if css.modules.localsConvention configured)173import { myClass } from './component.module.css'174```175176## JSON Import177178```ts179import pkg from './package.json'180import { version } from './package.json' // Named import with tree-shaking181```182183## HMR API184185```ts186if (import.meta.hot) {187import.meta.hot.accept((newModule) => {188// Handle update189})190191import.meta.hot.dispose((data) => {192// Cleanup before module is replaced193})194195import.meta.hot.invalidate() // Force full reload196}197```198199<!--200Source references:201- https://vite.dev/guide/features202- https://vite.dev/guide/env-and-mode203- https://vite.dev/guide/assets204- https://vite.dev/guide/api-hmr205-->206