/** Assembles a self-contained deployment folder at ./build/ from the `output: 'standalone'` next build output. Next.js does not include .next/static or public/ in .next/standalone by itself, so this script copies them in. The result can be deployed as-is and started with `node server.js` from inside ./build/, without running `npm install`. */ import { cpSync, existsSync, rmSync } from 'node:fs' import path from 'node:path' const root = path.resolve(import.meta.dirname, '..') const standaloneDir = path.join(root, '.next', 'standalone') const buildDir = path.join(root, 'build') if (!existsSync(standaloneDir)) { console.error( `${standaloneDir} not found. Run "next build" with output: 'standalone' set in next.config.ts first.` ) process.exit(1) } rmSync(buildDir, { recursive: true, force: true }) cpSync(standaloneDir, buildDir, { recursive: true }) cpSync( path.join(root, '.next', 'static'), path.join(buildDir, '.next', 'static'), { recursive: true } ) const publicDir = path.join(root, 'public') if (existsSync(publicDir)) { cpSync(publicDir, path.join(buildDir, 'public'), { recursive: true }) } console.log(`build assembled at ${buildDir}`)