diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 0000000..cc62c72 --- /dev/null +++ b/.vercelignore @@ -0,0 +1,7 @@ +.env* +dist +.eve +.output +.workflow-data +*.tgz +.claude diff --git a/demo/eve-plugin.ts b/demo/eve-plugin.ts index 5dbe2bc..808bc3b 100644 --- a/demo/eve-plugin.ts +++ b/demo/eve-plugin.ts @@ -40,7 +40,8 @@ export type EveAgentOptions = { export function eveAgent(options: EveAgentOptions): Plugin { return { name: "eve-agent", - apply: "serve", + apply: (_config, { command, mode }) => + command === "serve" && mode === "standalone", async configureServer(server) { const eve = await importEveHost(); const serverUrl = `http://127.0.0.1:${options.port}/`; diff --git a/demo/package.json b/demo/package.json index 9f97c1e..fe07d25 100644 --- a/demo/package.json +++ b/demo/package.json @@ -3,8 +3,8 @@ "private": true, "type": "module", "scripts": { - "dev": "vite", - "build": "eve build && vite build" + "dev": "vite --mode standalone", + "build": "vite build" }, "devDependencies": { "@tailwindcss/vite": "^4.3.2", diff --git a/demo/vercel.json b/demo/vercel.json index 8502607..884072e 100644 --- a/demo/vercel.json +++ b/demo/vercel.json @@ -1,5 +1,25 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "framework": "eve", - "routes": [{ "src": "^/$", "dest": "/index.html" }] + "services": { + "web": { + "root": ".", + "framework": "vite", + "devCommand": "vite" + }, + "eve": { + "root": ".", + "framework": "eve", + "buildCommand": "eve build" + } + }, + "rewrites": [ + { + "source": "/eve/(.*)", + "destination": { "service": "eve" } + }, + { + "source": "/(.*)", + "destination": { "service": "web" } + } + ] } diff --git a/demo/vite.config.ts b/demo/vite.config.ts index 8b57e34..94665bb 100644 --- a/demo/vite.config.ts +++ b/demo/vite.config.ts @@ -5,30 +5,21 @@ import { eveAgent } from "./eve-plugin"; const port = parseInt(process.env.PORT ?? "3000", 10); const agentPort = 2000; -// On Vercel builds, `eve build` writes the deployment bundle to -// .vercel/output (Vercel Build Output API) and `.output/public` is never -// deployed. The static site must land in the bundle's static directory, -// where it is served ahead of the eve catch-all function. Never empty that -// directory: eve may have written assets into it already. -function resolveBuildOptions(root: string) { - if (process.env.VERCEL) { - return { outDir: `${root}/.vercel/output/static`, emptyOutDir: false }; - } - return { outDir: `${root}/.output/public`, emptyOutDir: true }; -} - -export default defineConfig({ +export default defineConfig(({ mode }) => ({ root: `${import.meta.dirname}/app`, publicDir: `${import.meta.dirname}/public`, - build: resolveBuildOptions(import.meta.dirname), + build: { outDir: `${import.meta.dirname}/dist`, emptyOutDir: true }, server: { port, - open: true, - proxy: { "/eve": `http://127.0.0.1:${agentPort}` }, + open: mode === "standalone", + proxy: + mode === "standalone" + ? { "/eve": `http://127.0.0.1:${agentPort}` } + : undefined, }, plugins: [ tailwindcss(), eveAgent({ root: import.meta.dirname, port: agentPort }), ], resolve: { alias: { "@": `${import.meta.dirname}/../src` } }, -}); +}));