Skip to content

Commit 1f3fa67

Browse files
committed
wip
1 parent 198df3c commit 1f3fa67

File tree

6 files changed

+57
-76
lines changed

6 files changed

+57
-76
lines changed

app/entry.server.tsx

Lines changed: 0 additions & 22 deletions
This file was deleted.

app/index.ts

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import "dotenv/config";
22
// started with https://developers.cloudflare.com/workers/get-started/quickstarts/
33
import express from "express";
4-
import { createRequestHandler } from "@react-router/express";
54
// import { broadcastDevReady } from "react-router";
65
// import path from "path";
76
import { verifyKey } from "discord-interactions";
@@ -18,31 +17,7 @@ import * as report from "~/commands/report";
1817
import * as track from "~/commands/track";
1918
import setupTicket from "~/commands/setupTickets";
2019

21-
declare module "react-router" {
22-
// Your AppLoadContext used in v2
23-
interface AppLoadContext {
24-
whatever: string;
25-
}
26-
27-
// TODO: remove this once we've migrated to `Route.LoaderArgs` instead for our loaders
28-
interface LoaderFunctionArgs {
29-
context: AppLoadContext;
30-
}
31-
32-
// TODO: remove this once we've migrated to `Route.ActionArgs` instead for our actions
33-
interface ActionFunctionArgs {
34-
context: AppLoadContext;
35-
}
36-
}
37-
3820
// const BUILD_DIR = path.join(process.cwd(), "build");
39-
const viteDevServer = isProd()
40-
? undefined
41-
: await import("vite").then((vite) =>
42-
vite.createServer({
43-
server: { origin: "localhost:3000", middlewareMode: true },
44-
}),
45-
);
4621

4722
const app = express();
4823

@@ -56,16 +31,37 @@ app.use(Sentry.Handlers.requestHandler());
5631
Route handlers and static hosting
5732
*/
5833

59-
if (viteDevServer) {
60-
app.use(viteDevServer.middlewares);
61-
} else {
34+
if (isProd()) {
35+
console.log("Starting production server");
6236
app.use(
6337
"/assets",
64-
express.static("build/client/assets", {
65-
immutable: true,
66-
maxAge: "1y",
38+
express.static("build/client/assets", { immutable: true, maxAge: "1y" }),
39+
);
40+
app.use(express.static("build/client", { maxAge: "1h" }));
41+
// @ts-expect-error Because this is a weird circular import that React Router wants for custom server integrations
42+
// https://github.com/remix-run/react-router-templates/blob/f1a43a647de66d811b85d7f96d3b57b7e29ce0e7/node-custom-server/server.js#L41
43+
const source = await import("./build/server/index.js");
44+
console.log({ source });
45+
app.use(source.app);
46+
} else {
47+
console.log("Starting development server");
48+
const viteDevServer = await import("vite").then((vite) =>
49+
vite.createServer({
50+
server: { middlewareMode: true },
6751
}),
6852
);
53+
app.use(viteDevServer.middlewares);
54+
viteDevServer
55+
.ssrLoadModule("./app/server.ts")
56+
.then((source) => {
57+
app.use(source.app);
58+
})
59+
.catch((error) => {
60+
if (typeof error === "object" && error instanceof Error) {
61+
viteDevServer.ssrFixStacktrace(error);
62+
}
63+
console.log({ error });
64+
});
6965
}
7066
app.use(express.static("build/client", { maxAge: "1h" }));
7167

@@ -105,21 +101,6 @@ registerCommand(report);
105101
registerCommand(track);
106102
registerCommand(setupTicket);
107103

108-
const build = viteDevServer
109-
? () => viteDevServer.ssrLoadModule("virtual:react-router/server-build")
110-
: // @ts-ignore This breaks when `build/` doesn't exist, like during CI
111-
await import("../build/server/index.js");
112-
113-
// needs to handle all verbs (GET, POST, etc.)
114-
app.all(
115-
"*",
116-
createRequestHandler({
117-
// `remix build` and `remix dev` output files to a build directory, you need
118-
// to pass that build to the request handler
119-
build,
120-
}),
121-
);
122-
123104
/** ERROR TRACKING
124105
Must go after route handlers
125106
*/

app/server.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import "react-router";
2+
import { createRequestHandler } from "@react-router/express";
3+
import express from "express";
4+
5+
export const app = express();
6+
app.use(
7+
createRequestHandler({
8+
// @ts-expect-error - virtual module provided by React Router at build time
9+
build: () => import("virtual:react-router/server-build"),
10+
}),
11+
);

package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"type": "module",
66
"scripts": {
7-
"dev": "npm run dev:init; run-p dev:css dev:app",
7+
"dev": "npm run dev:init; run-p dev:css dev:bot",
88
"start": "npm run start:migrate; npm run start:bot",
99
"test": "vitest",
1010
"build": "run-s build:*",
@@ -14,14 +14,14 @@
1414
"kysely": "kysely",
1515
"": "",
1616
"start:migrate": "kysely migrate:list; kysely migrate:latest",
17-
"start:bot": "react-router-serve build/server/index.js",
17+
"start:bot": "node build/server/index.js",
1818
"prepare": "husky || true",
1919
"typecheck": "react-router typegen && tsc -b",
2020
"build:css": "npm run generate:css --minify",
2121
"build:app": "react-router build",
2222
"dev:init": "run-s start:migrate kysely:seed generate:db-types",
2323
"dev:css": "npm run generate:css -- --watch",
24-
"dev:app": "react-router dev",
24+
"dev:bot": "tsx watch --exclude 'vite.config.*' ./app/index.js",
2525
"kysely:seed": "kysely seed:run",
2626
"generate:css": "tailwindcss -o ./app/styles/tailwind.css",
2727
"generate:db-types": "kysely-codegen --log-level debug --dialect sqlite --out-file ./app/db.d.ts; prettier --write ./app/db.d.ts"
@@ -46,6 +46,7 @@
4646
"discord.js": "^14.16.0",
4747
"dotenv": "^16.0.1",
4848
"express": "^4.18.1",
49+
"isbot": "^5",
4950
"kysely": "^0.27.5",
5051
"kysely-ctl": "^0.10.1",
5152
"lodash-es": "^4.17.21",

vite.config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { reactRouter } from "@react-router/dev/vite";
22
import { defineConfig } from "vite";
33
import tsconfigPaths from "vite-tsconfig-paths";
44

5-
export default defineConfig({
6-
server: {
7-
port: 3000,
8-
origin: "localhost:3000",
5+
export default defineConfig(({ isSsrBuild }) => ({
6+
build: {
7+
rollupOptions: isSsrBuild ? { input: "./app/server.ts" } : undefined,
98
},
9+
server: { port: 3000, origin: "localhost:3000" },
1010
plugins: [tsconfigPaths(), reactRouter()],
11-
});
11+
}));

0 commit comments

Comments
 (0)