1
Fork 0

Make a monorepo with express

This commit is contained in:
Hadeed 2024-05-01 11:08:21 +05:00
parent 04ac2eeb0d
commit f33dd20569
7 changed files with 46 additions and 4 deletions

View file

@ -12,7 +12,7 @@
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./src/app.jsx";
import App from "./src/client/app.jsx";
createRoot(document.getElementById("root")).render(
React.createElement(

View file

@ -1,11 +1,21 @@
{
"type": "module",
"scripts": {
"dev": "concurrently 'npm run dev:client' 'npm run dev:server'",
"dev:client": "vite --open",
"dev:server": "nodemon src/server/server.js",
"build": "vite build",
"start": "node src/server/server.js"
},
"dependencies": {
"express": "^4.19.2",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"autoprefixer": "^10.4.19",
"concurrently": "^8.2.2",
"nodemon": "^3.1.0",
"postcss": "^8.4.38",
"prettier": "^3.3.2",
"prettier-plugin-css-order": "^2.1.2",

View file

@ -1,3 +0,0 @@
export default () => (
<h1 className="text-4xl font-extrabold">Using React and Tailwind</h1>
);

17
src/client/app.jsx Normal file
View file

@ -0,0 +1,17 @@
export default () => {
return (
<>
<h1 className="text-4xl font-extrabold">React + Express + Tailwind</h1>
<button
className="rounded bg-blue-500 px-4 py-2 font-bold text-white hover:bg-blue-700"
onClick={() => {
fetch("/api")
.then((response) => response.text())
.then((data) => alert(data));
}}
>
Click me!
</button>
</>
);
};

10
src/server/app.js Normal file
View file

@ -0,0 +1,10 @@
import express from "express";
const app = express();
const rootRouter = express.Router();
rootRouter.get("/", (_, res) => res.send("Backend is working!"));
app.use(express.static("dist"));
app.use("/api", rootRouter);
export default app;

3
src/server/server.js Normal file
View file

@ -0,0 +1,3 @@
import app from "./app.js";
app.listen(3000);

View file

@ -1,6 +1,11 @@
import { defineConfig } from "vite";
export default defineConfig({
server: {
proxy: {
"/api": "http://localhost:3000",
},
},
esbuild: {
jsxInject: `import React from 'react'`,
},