LeRobot.js / vite.config.ts
NERDDISCO's picture
refactor: move examples into separate folders
4500b8e
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { resolve } from "path";
import { existsSync } from "fs";
export default defineConfig(({ mode }) => {
// Check if we're in a workspace environment (has packages/web/src)
const isWorkspace = existsSync(resolve(__dirname, "./packages/web/src"));
const baseConfig = {
plugins: [],
resolve: {
alias: {
"@": resolve(__dirname, "./src"),
// Only add workspace alias if in workspace environment
...(isWorkspace && {
"@lerobot/web": resolve(__dirname, "./packages/web/src"),
}),
},
},
};
if (mode === "demo") {
// React demo mode - includes React, Tailwind, shadcn/ui
return {
...baseConfig,
plugins: [react()],
css: {
postcss: "./postcss.config.mjs",
},
build: {
outDir: "dist/demo",
rollupOptions: {
input: {
main: resolve(__dirname, "index.html"),
},
},
},
};
}
if (mode === "vanilla") {
// Vanilla mode - current implementation without React
return {
...baseConfig,
build: {
outDir: "dist/vanilla",
rollupOptions: {
input: {
main: resolve(__dirname, "vanilla.html"),
},
},
},
};
}
if (mode === "lib") {
// Library mode - core library without any demo UI
return {
...baseConfig,
build: {
lib: {
entry: resolve(__dirname, "src/main.ts"),
name: "LeRobot",
fileName: "lerobot",
},
rollupOptions: {
external: ["serialport", "react", "react-dom"],
output: {
globals: {
serialport: "SerialPort",
react: "React",
"react-dom": "ReactDOM",
},
},
},
},
};
}
// Default mode (fallback to demo)
return defineConfig({ mode: "demo" });
});