Serverless Firebase Functions Plugin
This plugin enables support for HTTP/PubSub NodeJS/TypeScript Firebase Functions within the Serverless Framework.
Highlights
- Convert transparent HTTP and PubSub functions to Firebase compatible function
- Deploy Firebase Function sources individually, no more another function sources deployed !!!
- Deploy any HTTP handler based on Express request/response to Firebase Functions without any adaptation.
- Support TypeScript functions
- Environment variables automatically managed by Cloud Runtime Configuration API
- Based on serverless-webpack plugin for package sources
- Based on official Firebase Tools and Firebase Admin
- Support NPM and Yarn for packaging
Install
$ npm install serverless-firebase-functions --save-dev
Add the plugin to your serverless.yml
file:
plugins: - serverless-firebase-functions - serverless-webpack
Configure
Firstly require to configure serverless-webpack plugin.
// webpack.config.jsconst path = ;const slsw = ; moduleexports = entry: slswlibentries resolve: extensions: '.js' '.json' '.ts' '.tsx' output: libraryTarget: 'commonjs' path: path filename: '[name].js' target: 'node' module: rules: test: /\.ts$/ use: loader: 'ts-loader' ;
Next requried to configure Firebase Serverless provider and standard configuration for Firebase Functions deploy.
provider: name: firebase stage: dev runtime: nodejs8 # nodejs8 or nodejs10 region: myFirebaseDeployRegion #eg. "us-central1". See there: https://firebase.google.com/docs/functions/locations project: myFireabaseProjectName #See there: https://firebase.google.com/docs/projects/learn-more token: myFirebaseAccessToken #See how to generate it there: https://www.npmjs.com/package/firebase-tools#using-with-ci-systems environment: serviceEnvVar: someValue package: individually: true functions: myHttpFunction: handler: handlers/myHandlerFile.myFunctionName environment: serviceEnvVar: overServiceValue events: - http: path: myHttpUrlPath method: GET|PUT|POST|DELETE myPubSubFunction: handler: handlers/myHandlerFile.myFunctionName environment: functionEnvVar: someValue events: - pubsub: topic: myPubSubMessageTopic
Deployment
$ serverless deploy
To Do
- Use webpack to deploy function with packed dependencies.
- Deploy functions clean, without other handler sources.
- Add PubSub functions support.
- Base on pure Firebase Tools API.
- Add inherited environment variables support.
- Optimize deployment, make it parallel for every function.
- Make possible to deploy external packages functions from "node_modules", just by mention them in config.