@capgo/capgo-skills
Version:
55 agent skills for Capacitor mobile development
57 lines (39 loc) • 2.35 kB
Markdown
# React + Capacitor
## Vite (recommended)
Current: Vite 8 (Rolldown-based), `create-vite` 9. Output `dist/`.
```bash
npm create vite@latest my-app -- --template react-ts
```
```ts
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
base: '/', // keep root base for the app build
build: { outDir: 'dist' },
server: { host: true }, // LAN access for live reload on devices
});
```
`webDir: 'dist'`. `BrowserRouter` / `createBrowserRouter` work because Capacitor falls back to `index.html` for extensionless paths; `HashRouter` is only needed if you already depend on hash URLs.
## React Router framework mode (v7/v8, ex-Remix)
Server rendering must be off:
```ts
// react-router.config.ts
import type { Config } from '@react-router/dev/config';
export default {
ssr: false,
} satisfies Config;
```
- Output: `build/client` (contains `index.html`). `webDir: 'build/client'`.
- The root route still renders at build time, so route modules must be SSR-safe (no `window` at module scope).
- `loader` functions do not run in the app; use `clientLoader`.
- With `prerender` configured, the SPA fallback is written to `build/client/__spa-fallback.html` and `index.html` is the prerendered `/`. Capacitor always serves `index.html`, so avoid prerendering non-root routes for the app build or verify cold-start behaviour.
## TanStack Router / Start
TanStack Router on Vite is a normal SPA (`dist`). TanStack Start needs SPA/static mode; check its current docs for the SPA output directory and set `webDir` to the folder that contains `index.html`.
## Create React App (legacy)
CRA is deprecated. Existing projects build to `build/` (`webDir: 'build'`) and use `REACT_APP_*` env vars. Recommend migrating to Vite when touching the build; do not start new projects on CRA.
## Traps
- `import.meta.env.VITE_*` is inlined at build time. Use a separate `.env.mobile` + `vite build --mode mobile` if the app build needs different API URLs.
- `vite preview` testing is not equivalent to the device: test the synced app.
- Service workers (`vite-plugin-pwa`) are usually unnecessary in the app and can serve stale bundles after updates. Disable them for the mobile build or scope them carefully, especially when using Capgo live updates.