Ensure you have Firebase CLI installed and initialize Cloud Functions with TypeScript support.
npm i -g firebase-tools
firebase init functionsNavigate to the functions directory and install NestJS along with required dependencies.
cd functions
npm i @nestjs/core @nestjs/common express@5 @nestjs/platform-express @types/jest @nestjs/testingCreate a Nest CLI configuration file to enable NestJS CLI support.
File: functions/nest-cli.json
{
"language": "ts",
"collection": "@nestjs/schematics",
"sourceRoot": "src"
}Update TypeScript settings to enable necessary features for Cloud Functions.
File: functions/tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitReturns": true,
"noUnusedLocals": true,
"outDir": "lib",
"sourceMap": true,
"strict": false,
"target": "es2017",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"declaration": true,
"removeComments": true,
"baseUrl": "./",
"incremental": true,
"esModuleInterop": true
},
"compileOnSave": true,
"include": ["src"]
}Use NestJS CLI to generate a new module and a sample controller.
nest generate module app --flat
nest generate controller helloWrap the NestJS app inside a Firebase Cloud Function.
File: functions/src/index.ts
import * as functions from "firebase-functions";
import { NestFactory } from "@nestjs/core";
import { ExpressAdapter } from "@nestjs/platform-express";
import { AppModule } from "./app.module";
import express from "express";
const server = express();
const createNestServer = async (expressInstance) => {
const app = await NestFactory.create(
AppModule,
new ExpressAdapter(expressInstance),
);
app.enableCors();
return app.init();
};
createNestServer(server)
.then(() => console.log("Nest Ready"))
.catch((err) => console.error("Nest broken", err));
export const api = functions.https.onRequest(server);Build and deploy your Cloud Functions.
cd functions
npm run serve
firebase deploy --only functionsUse Vite to scaffold a new React TypeScript project.
npm create vite@latest frontend -- --template react-tsNavigate to the frontend directory and install axios for API requests.
cd frontend
npm i axiosEnsure Firebase is set up to host your frontend application.
firebase init hostingGenerate the production build of your frontend application.
npm run buildDeploy the frontend application using Firebase Hosting.
firebase deploy --only hosting- The
frontend/distfolder serves as the public directory for Firebase Hosting. - Ensure your Firebase project is properly set up before deployment.
This guide provides a streamlined setup process for integrating NestJS with Firebase Cloud Functions as the backend and React with Vite as the frontend.