diff --git a/apps/web/package.json b/apps/web/package.json index 349936c8a..41a6129f3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,8 +4,8 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build", - "start": "next start", + "build": "next build && tsc --project tsconfig.server.json", + "start": "node dist/index.js", "lint": "next lint", "db-studio": "prisma db studio", "stripe:listen": "stripe listen --forward-to localhost:3000/api/stripe/webhook" diff --git a/apps/web/server/index.ts b/apps/web/server/index.ts new file mode 100644 index 000000000..96c2a478c --- /dev/null +++ b/apps/web/server/index.ts @@ -0,0 +1,22 @@ +import { createServer } from 'http'; +import next from 'next'; +import { parse } from 'url'; + +const hostname = process.env.HOST || '[::]'; +const port = parseInt(process.env.PORT || '3000', 10); +const dev = process.env.NODE_ENV !== 'production'; +const app = next({ dev, hostname, port }); +const handle = app.getRequestHandler(); + +app.prepare().then(() => { + createServer((req, res) => { + const parsedUrl = parse(req.url!, true) + handle(req, res, parsedUrl) + }).listen(port); + + // eslint-disable-next-line no-console + console.log( + `> Server listening at http://${hostname}:${port} as ${dev ? 'development' : process.env.NODE_ENV + }` + ); +}); diff --git a/apps/web/tsconfig.server.json b/apps/web/tsconfig.server.json new file mode 100644 index 000000000..8cb34c903 --- /dev/null +++ b/apps/web/tsconfig.server.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "dist", + "target": "es2017", + "isolatedModules": false, + "noEmit": false + }, + "include": ["server/**/*.ts"] +}