diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..04480ff --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +CODESERVER_HOST=your-codeserver.example.com +CODESERVER_PORT=3000 diff --git a/.gitignore b/.gitignore index 4f076b5..17e8407 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ node_modules/ .next/ out/ +.env.local +.env*.local +tsconfig.tsbuildinfo diff --git a/next-env.d.ts b/next-env.d.ts index 9edff1c..c4b7818 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.ts b/next.config.ts index 1040bca..2462dd4 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,10 +1,32 @@ import type { NextConfig } from "next"; const isProd = process.env.NODE_ENV === "production"; +const isCodeserver = process.env.NEXT_DEV_PROFILE === "codeserver"; + +// In dev under code-server's reverse proxy, basePath/assetPrefix must match +// the proxy URL so links, assets, and the HMR socket all resolve. +// Use /absproxy/{port} (NOT /proxy/{port}) — /proxy strips the prefix before +// forwarding; /absproxy preserves it so basePath matches the incoming request. +// CODESERVER_HOST and CODESERVER_PORT are loaded from .env.local by Next. +function codeserverConfig() { + const host = process.env.CODESERVER_HOST; + if (!host) { + throw new Error( + "CODESERVER_HOST is required when NEXT_DEV_PROFILE=codeserver (set it in .env.local)" + ); + } + const port = process.env.CODESERVER_PORT ?? "3000"; + return { basePath: `/absproxy/${port}`, allowedDevOrigins: [host] }; +} + +const cs = isCodeserver ? codeserverConfig() : null; +const basePath = cs?.basePath ?? (isProd ? "/loto" : ""); const nextConfig: NextConfig = { output: "export", - basePath: isProd ? "/loto" : "", + basePath, + assetPrefix: basePath || undefined, + ...(cs?.allowedDevOrigins ? { allowedDevOrigins: cs.allowedDevOrigins } : {}), }; export default nextConfig; diff --git a/package.json b/package.json index 92b9a4b..65e8ec7 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "dev": "next dev", + "dev:codeserver": "NEXT_DEV_PROFILE=codeserver next dev -H 0.0.0.0", "build": "next build", "start": "next start", "lint": "eslint"