⚡ vite-plugin-solid
A simple integration to run solid-js with vite
Disclaimer
This targets vite 2 (which is in beta right now). To checkout vite 1 support, check out the vite-1.x
branch.
The main breaking change is that the package has been renamed from @amoutonbrady/vite-plugin-solid
to vite-plugin-solid
.
For other breaking changes, check the migration guide of vite.
Features
- HMR with minimal configuration
- Drop-in installation as vite plugin
- Minimal bundle size (5.99kb non gzip for a Hello World)
- Support typescript (
.jsx .tsx
) out of the box, even when exported as source
in the node_modules
- 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 my-project
$ cd my-project
$ npm install
$ npm run dev
$ npm run build
Installation
Install vite
, vite-plugin-solid
and babel-preset-solid
as dev dependencies.
Install solid-js
as dependency.
You have to install those so that you are in control to which solid version is used to compile your code.
$ npm install -D vite vite-plugin-solid babel-preset-solid
$ npm install solid-js
$ pnpm add -D vite vite-plugin-solid babel-preset-solid
$ pnpm add solid-js
$ yarn add -D vite vite-plugin-solid babel-preset-solid
$ yarn add solid-js
Add it as plugin to vite.config.ts
import { UserConfig } from "vite";
import { solidPlugin } from "vite-plugin-solid";
const config: UserConfig = {
plugins: [solidPlugin()],
};
export default config;
Or vite.config.js
import solidPlugin from "vite-plugin-solid";
const config = {
plugins: [solidPlugin()],
};
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.
NB: This is actually a partial HMR, it doesn't retain any state, it just reload the page without reloading the page...
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"
}
}
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