Skip to content

Vite Plugin

The Vite plugin handles all the configuration needed to run PraxisJS — decorator support, JSX transform, and optional HMR.

sh
npm install -D @praxisjs/vite-plugin
sh
pnpm add -D @praxisjs/vite-plugin
sh
yarn add -D @praxisjs/vite-plugin
sh
bun add -d @praxisjs/vite-plugin

Setup

ts
// vite.config.ts
import { defineConfig } from 'vite'
import { praxisjs } from '@praxisjs/vite-plugin'

export default defineConfig({
  plugins: [praxisjs()],
})

Options

ts
praxisjs({
  hmr: true,         // Enable component-level hot reload (default: false)
  autoImport: true,  // Auto-import common decorators (default: false)
})
OptionTypeDefaultDescription
hmrbooleanfalseComponent-level hot module replacement
autoImportbooleanfalseAuto-import @Component, @State, @Prop etc.

What the plugin does

  • Decorators — sets esbuild target: 'ES2022' to enable native TypeScript decorators
  • JSX transform — configures the React-JSX transform to use @praxisjs/jsx as the import source
  • HMR — when enabled, components update in place without a full page reload when their source changes

TypeScript config

The plugin handles Vite/esbuild, but you still need to configure TypeScript separately:

json
// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "jsx": "react-jsx",
    "jsxImportSource": "@praxisjs/jsx",
    "useDefineForClassFields": false,
    "strict": true,
    "noEmit": true
  }
}

useDefineForClassFields: false is required

With true, TypeScript compiles class fields via Object.defineProperty, which runs after decorator initializers and overwrites the signal wiring they set up. Set it to false so fields compile as constructor assignments and decorators work correctly.

Released under the MIT License.