⚡ Vite Plugin Solid
A simple integration to run solid-js with vite
Features
- HMR with minimal configuration
- Drop-in installation as vite plugin
- Minimal bundle size (5.82kb non gzip for a Hello World)
- Support typescript (
.js .ts .jsx .tsx
) out of the box
- Support code splitting out of the box
Quickstart
You can use the vite-template-solid starter templates similar to CRA:
$ npx degit amoutonbrady/vite-template-solid/js
$ cd my-project
$ npm install
$ npm run dev
$ npm run build
Usage
Installation
Install vite and vite-plugin-solid as dev dependencies
$ npm install -D vite @amoutonbrady/vite-plugin-solid
$ pnpm add -D vite @amoutonbrady/vite-plugin-solid
$ yarn add -D vite @amoutonbrady/vite-plugin-solid
Add it as plugin to vite.config.ts
import { UserConfig } from "vite";
import { solidPlugin } from "@amoutonbrady/vite-plugin-solid";
const config: UserConfig = {
root: "src",
outDir: "dist",
plugins: [solidPlugin()],
enableEsbuild: false,
};
export default config;
Or vite.config.js
import { solidPlugin } from "@amoutonbrady/vite-plugin-solid";
const config = {
root: "src",
outDir: "dist",
plugins: [solidPlugin()],
enableEsbuild: false,
};
export default config;
Finally you have to add a bit of code to your entry point to activate HMR. This might be handled automatically at some point by the plugin but for now it's manual.
export const dispose = render(() => App, rootElement);
if (import.meta.hot) {
import.meta.hot.accept();
import.meta.hot.dispose(dispose);
}
Run
Just use regular vite
or vite build
commands
{
"scripts": {
"dev": "vite",
"build": "vite build"
}
}
Plugin options
You can pass options to the plugin via vite.config.(js|ts)
import { solidPlugin } from "@amoutonbrady/vite-plugin-solid";
const options = {
babel: {
presets: ["@babel/preset-env"],
},
};
const config = {
root: "src",
outDir: "dist",
plugins: [solidPlugin(options)],
enableEsbuild: false,
};
export default config;
For now the only options is to add extra babel config.
Limitations
This is an early version, some things may not work as expected. Please report findings.
HMR is manual and doesn't hold state on reload
- ESBuild has to be deactivated because of its JSX management which slow downs a bit the reload
- Vite is primarly build for Vue and therefore includes it when installing it
Troubleshooting
It appears that Webstorm generate some weird triggers when saving a file. In order to prevent that you can follow this thread and disable the "Safe Write" option in "Settings | Appearance & Behavior | System Settings".
Got a question? / Need help?
Join solid discord
Credits
- solid-js and vite obviously
- svite - initial inspiration (also based this readme on it)