From b77d9e30cb747b147539bda24cfbdf297054b7ab Mon Sep 17 00:00:00 2001 From: Yam Borodetsky Date: Sat, 30 Mar 2024 21:58:16 +0500 Subject: [PATCH] feat: multi firebase.json Get some turbo benefits but lose the ability to iterate on functions in a Backend for Frontend in locally together with the frontend. --- .firebaserc => apps/api/.firebaserc | 0 apps/api/firebase.json | 19 +++++++++++++++++++ apps/api/package.json | 8 +++++--- apps/api/src/utils.ts | 2 +- apps/web/.firebaserc | 5 +++++ firebase.json => apps/web/firebase.json | 6 +----- apps/web/package.json | 4 +++- package.json | 6 ++---- pnpm-lock.yaml | 15 +++++++++------ turbo.json | 9 +++++---- 10 files changed, 50 insertions(+), 24 deletions(-) rename .firebaserc => apps/api/.firebaserc (100%) create mode 100644 apps/api/firebase.json create mode 100644 apps/web/.firebaserc rename firebase.json => apps/web/firebase.json (84%) diff --git a/.firebaserc b/apps/api/.firebaserc similarity index 100% rename from .firebaserc rename to apps/api/.firebaserc diff --git a/apps/api/firebase.json b/apps/api/firebase.json new file mode 100644 index 0000000..afaa20a --- /dev/null +++ b/apps/api/firebase.json @@ -0,0 +1,19 @@ +{ + "functions": [ + { + "source": ".", + "ignore": [ + "node_modules", + ".git", + "firebase-debug.log", + "firebase-debug.*.log" + ], + "isolate": true + } + ], + "emulators": { + "functions": { + "port": 3001 + } + } +} diff --git a/apps/api/package.json b/apps/api/package.json index 97f5a7c..f6e4ecd 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -13,13 +13,14 @@ }, "scripts": { "dev": "vite build --watch", + "emulate": "firebase emulators:start --only functions", + "deploy": "firebase deploy --only functions", "build": "rimraf dist && vite build", "lint": "eslint --ext .js,.ts .", "build:watch": "tsc --watch", "serve": "npm run build && firebase emulators:start --only functions", "shell": "npm run build && firebase functions:shell", "start": "npm run shell", - "deploy": "firebase deploy --only functions", "logs": "firebase functions:log", "clean": "rimraf node_modules dist isolate" }, @@ -29,12 +30,12 @@ "main": "dist/index.js", "dependencies": { "@faker-js/faker": "^8.0.1", + "@google-cloud/functions-framework": "^3.3.0", "express": "^4.18.2", "fastify": "^4.26.2", "firebase-admin": "^12.0.0", "firebase-functions": "^4.8.1", - "utilities": "workspace:*", - "@google-cloud/functions-framework": "^3.3.0" + "utilities": "workspace:*" }, "devDependencies": { "@types/rollup-plugin-generate-package-json": "^3.2.0", @@ -44,6 +45,7 @@ "eslint-config-google": "^0.14.0", "eslint-plugin-import": "^2.25.4", "firebase-functions-test": "^3.1.0", + "firebase-tools-with-isolate": "^13.4.0", "rimraf": "^5.0.1", "rollup-plugin-generate-package-json": "^3.2.0", "typescript": "^5.0.0", diff --git a/apps/api/src/utils.ts b/apps/api/src/utils.ts index 8cf9e81..b8df3ef 100644 --- a/apps/api/src/utils.ts +++ b/apps/api/src/utils.ts @@ -31,7 +31,7 @@ export const registerRoutes = (fastify: FastifyInstance) => { fastify.get('*', (_req, res) => { void res.send({ - hello: 'world!', + hello: 'world!!!', randomName: faker.person.firstName(), iLikeTurtles: iLikeTurtles(), nice: 69, diff --git a/apps/web/.firebaserc b/apps/web/.firebaserc new file mode 100644 index 0000000..82a014b --- /dev/null +++ b/apps/web/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "turborepo-demo-74599" + } +} diff --git a/firebase.json b/apps/web/firebase.json similarity index 84% rename from firebase.json rename to apps/web/firebase.json index 99a5974..3fee78a 100644 --- a/firebase.json +++ b/apps/web/firebase.json @@ -1,8 +1,7 @@ { "functions": [ { - "source": "apps/api", - "codebase": "default", + "source": "../api", "ignore": [ "node_modules", ".git", @@ -27,9 +26,6 @@ ] }, "emulators": { - "functions": { - "port": 3001 - }, "hosting": { "enabled": true, "port": 3002 diff --git a/apps/web/package.json b/apps/web/package.json index 151c13a..430e916 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,10 +4,11 @@ "version": "0.0.0", "scripts": { "dev": "vite", + "emulate": "firebase emulators:start --only hosting", + "deploy": "firebase deploy --only hosting", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", - "deploy": "firebase deploy --only hosting", "clean": "rimraf node_modules dist" }, "dependencies": { @@ -20,6 +21,7 @@ "@types/react-dom": "^18.2.4", "@vitejs/plugin-react": "^4.0.0", "eslint": "^8.41.0", + "firebase-tools-with-isolate": "^13.4.0", "vite": "^5.0.0" } } diff --git a/package.json b/package.json index 988f0b5..26bf256 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "type": "module", "scripts": { "start": "turbo run dev emulators", - "dev": "turbo run build && turbo run root:emulate dev", + "dev": "turbo run emulate dev", "clean": "turbo run root:clean clean", "build": "turbo run build", "deploy": "turbo run deploy", @@ -17,12 +17,10 @@ "lint:fix": "pnpm format && turbo run lint -- --fix", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "format:check": "prettier --check \"**/*.{ts,tsx,md}\"", - "root:clean": "rimraf node_modules", - "root:emulate": "firebase emulators:start" + "root:clean": "rimraf node_modules" }, "devDependencies": { "eslint-config-custom": "workspace:*", - "firebase-tools-with-isolate": "^13.4.0", "prettier": "^3.0.0", "tsconfig": "workspace:*", "turbo": "^1.13.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59fb2f9..c69933f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,6 @@ importers: eslint-config-custom: specifier: workspace:* version: link:packages/eslint-config-custom - firebase-tools-with-isolate: - specifier: ^13.4.0 - version: 13.4.0 prettier: specifier: ^3.0.0 version: 3.2.5 @@ -72,6 +69,9 @@ importers: firebase-functions-test: specifier: ^3.1.0 version: 3.1.1(firebase-admin@12.0.0)(firebase-functions@4.8.2)(jest@29.7.0) + firebase-tools-with-isolate: + specifier: ^13.4.0 + version: 13.4.0 rimraf: specifier: ^5.0.1 version: 5.0.5 @@ -109,6 +109,9 @@ importers: eslint: specifier: ^8.41.0 version: 8.57.0 + firebase-tools-with-isolate: + specifier: ^13.4.0 + version: 13.4.0 vite: specifier: ^5.0.0 version: 5.2.7 @@ -5188,7 +5191,7 @@ packages: google-auth-library: 7.14.1 inquirer: 8.2.6 inquirer-autocomplete-prompt: 2.0.1(inquirer@8.2.6) - isolate-package: 1.10.1 + isolate-package: 1.11.0 js-yaml: 3.14.1 jsonwebtoken: 9.0.2 leven: 3.1.0 @@ -6394,8 +6397,8 @@ packages: requiresBuild: true dev: true - /isolate-package@1.10.1: - resolution: {integrity: sha512-S7T/jZEQBqbYwG3hBlRvVRHId/0Faa2dJCaf3S8NgrgJtPTnBtnejl/9POpdkZn64PG8GbrVY9l07Aisy6oDlg==} + /isolate-package@1.11.0: + resolution: {integrity: sha512-3GGFHQ9pWVj1BC6dmM34s6mkovlmBakfyBAE00WwnYbCdzif71zx48GxdLV5gXh/E/hdrQwemNNMEqsetC73ZA==} hasBin: true dependencies: '@npmcli/arborist': 7.4.0 diff --git a/turbo.json b/turbo.json index a70cd4e..360b425 100644 --- a/turbo.json +++ b/turbo.json @@ -13,15 +13,16 @@ "cache": false, "persistent": true }, + "emulate": { + "dependsOn": ["build"], + "cache": false, + "persistent": true + }, "clean": { "cache": false }, "//#root:clean": { "cache": false - }, - "//#root:emulate": { - "cache": false, - "persistent": true } } }