1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00

Update/fix "examples/with-firebase-hosting-and-typescript" (#5864)

There were several issues with the example [examples/with-firebase-hosting-and-typescript](https://github.com/zeit/next.js/tree/canary/examples/with-firebase-hosting-and-typescript)
* `npm run serve`
  * Has no `pre` task that actually builds the app. Requires manual running of all build scripts.
  * Will choke on windows because trying to set environment variables with `NODE_ENV=production`
* Outdated Typescript and Tslint
* Not being able to deploy because `firebase-tools` being of a deprecated version.
* Structure, which I understand is based on `firebase-tools` generation, is confising with `src/functions/src` being generally bad structuring.

I remedied this and also improved some other factors:

* Remove dependency `prettier` as it is unused (f4d6f54)
* Upgrade all dependencies (09a9193)
  * Use upgraded firebase dependencies to deploy to node 8 environment (87e1e09, 7d8055b)
  * Remove deprecated tslint rule `no-unused-variable` (9392162)
* Flattened filestructure in `src/functions` (097a25a)
* Use ES import when importing next (6c99adb)
* Fixed incorrect name and added somewhat to the description in package.json.
  `with-firebase-hosting` → `with-firebase-hosting-and-typescript` (1ffa0b5)
* Fixed `serve` script by building before running, using [`cross-env`](https://www.npmjs.com/package/cross-env) to set environment variables and remove unecessary flag. (3a1e221, 422ccee, 8811e44)
* Add `.firebase` cache to `.gitignore` (4d7cbe4)
* Add `-C` (clean) flag when copying dependency files `copy-deps` (0826708)
* Use `strict: true` in the functions tsconfig (229b04f)

This was tested by running serve on windows and linx(WSL) and deploy on linux(WSL)

---

This is based on #5819 but correctly based from `canary`
This commit is contained in:
Oscar Busk 2018-12-11 23:24:18 +01:00 committed by Tim Neutkens
parent d58cecc92a
commit 4345343d88
7 changed files with 36 additions and 32 deletions

View file

@ -1 +1,4 @@
dist/ dist/
# Firebase cache
.firebase/

View file

@ -72,3 +72,7 @@ If you're having issues, feel free to tag @sampsonjoliver in the [issue you crea
* The empty `placeholder.html` file is so Firebase Hosting does not error on an empty `public/` folder and still hosts at the Firebase project URL. * The empty `placeholder.html` file is so Firebase Hosting does not error on an empty `public/` folder and still hosts at the Firebase project URL.
* `firebase.json` outlines the catchall rewrite rule for our Cloud Function. * `firebase.json` outlines the catchall rewrite rule for our Cloud Function.
* The [Firebase predeploy](https://firebase.google.com/docs/cli/#predeploy_and_postdeploy_hooks) hooks defined in `firebase.json` will handle linting and compiling of the next app and the functions sourceswhen `firebase deploy` is invoked. The only scripts you should need are `dev`, `clean` and `deploy`. * The [Firebase predeploy](https://firebase.google.com/docs/cli/#predeploy_and_postdeploy_hooks) hooks defined in `firebase.json` will handle linting and compiling of the next app and the functions sourceswhen `firebase deploy` is invoked. The only scripts you should need are `dev`, `clean` and `deploy`.
* Specifying [`"engines": {"node": "8"}`](package.json#L5-L7) in the `package.json` is required for firebase functions
to be deployed on Node 8 rather than Node 6
([Firebase Blog Announcement](https://firebase.googleblog.com/2018/08/cloud-functions-for-firebase-config-node-8-timeout-memory-region.html))
. This is matched in by specifying target as `es2017` in [`src/functions/tsconfig.json`](src/functions/tsconfig) so that typescript output somewhat compacter and moderner code.

View file

@ -1,10 +1,14 @@
{ {
"name": "with-firebase-hosting", "name": "with-firebase-hosting-and-typescript",
"version": "1.0.0", "version": "1.0.0",
"description": "Host Next.js SSR app on Firebase Cloud Functions with Firebase Hosting redirects.", "description": "Host Next.js SSR app on Firebase Cloud Functions with Firebase Hosting redirects. Built with typescript.",
"engines": {
"node": "8"
},
"scripts": { "scripts": {
"dev": "next src/app", "dev": "next src/app",
"serve": "NODE_ENV=production firebase serve --only functions,hosting", "preserve": "npm run build-public && npm run build-functions && npm run build-app && npm run copy-deps && npm run install-deps",
"serve": "cross-env NODE_ENV=production firebase serve",
"deploy": "firebase deploy", "deploy": "firebase deploy",
"clean": "rimraf \"dist/functions\" && rimraf \"dist/public\"", "clean": "rimraf \"dist/functions\" && rimraf \"dist/public\"",
"build-app": "next build \"src/app\"", "build-app": "next build \"src/app\"",
@ -13,26 +17,26 @@
"lint-app": "tslint --project src/app", "lint-app": "tslint --project src/app",
"typecheck-app": "tsc --project src/app", "typecheck-app": "tsc --project src/app",
"lint-functions": "tslint --project src/functions", "lint-functions": "tslint --project src/functions",
"copy-deps": "cpx \"*{package.json,package-lock.json,yarn.lock}\" \"dist/functions\"", "copy-deps": "cpx \"*{package.json,package-lock.json,yarn.lock}\" \"dist/functions\" -C",
"install-deps": "cd \"dist/functions\" && npm i" "install-deps": "cd \"dist/functions\" && npm i"
}, },
"dependencies": { "dependencies": {
"@zeit/next-typescript": "1.1.0", "@zeit/next-typescript": "^1.1.0",
"firebase-admin": "~5.12.1", "firebase-admin": "^6.3.0",
"firebase-functions": "^1.0.1", "firebase-functions": "^2.1.0",
"next": "^6.0.3", "next": "^7.0.0",
"react": "^16.3.2", "react": "^16.6.0",
"react-dom": "^16.3.2" "react-dom": "^16.6.0"
}, },
"devDependencies": { "devDependencies": {
"@types/next": "^2.4.10", "@types/next": "^7.0.0",
"@types/react": "^16.3.14", "@types/react": "^16.6.0",
"cpx": "1.5.0", "cpx": "1.5.0",
"firebase-tools": "3.18.4", "cross-env": "5.2.0",
"prettier": "1.12.1", "firebase-tools": "^6.1.0",
"rimraf": "2.6.2", "rimraf": "2.6.2",
"tslint": "^5.8.0", "tslint": "^5.11.0",
"tslint-react": "3.6.0", "tslint-react": "^3.6.0",
"typescript": "^2.5.3" "typescript": "^3.2.0"
} }
} }

View file

@ -1,5 +1,5 @@
import * as functions from 'firebase-functions'; import * as functions from 'firebase-functions';
const next = require('next'); import * as next from 'next';
const dev = process.env.NODE_ENV !== 'production'; const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev, conf: { distDir: 'next' } }); const app = next({ dev, conf: { distDir: 'next' } });

View file

@ -1,3 +0,0 @@
import * as functions from 'firebase-functions';
export { nextApp } from './app/next';

View file

@ -1,13 +1,12 @@
{ {
"compilerOptions": { "compilerOptions": {
"lib": ["es6"], "lib": ["es2017"],
"module": "commonjs", "module": "commonjs",
"noImplicitReturns": true, "strict": true,
"outDir": "../../dist/functions", "outDir": "../../dist/functions",
"sourceMap": true, "sourceMap": true,
"target": "es6", "target": "es2017",
"baseUrl": "./src" "baseUrl": "./"
}, },
"compileOnSave": true, "compileOnSave": true
"include": ["src"]
} }

View file

@ -107,9 +107,6 @@
// Warns if function overloads could be unified into a single function with optional or rest parameters. // Warns if function overloads could be unified into a single function with optional or rest parameters.
"unified-signatures": {"severity": "warning"}, "unified-signatures": {"severity": "warning"},
// Warns if code has an import or variable that is unused.
"no-unused-variable": {"severity": "warning"},
// Prefer const for values that will not change. This better documents code. // Prefer const for values that will not change. This better documents code.
"prefer-const": {"severity": "warning"}, "prefer-const": {"severity": "warning"},