serverless-firebase-functions
v0.4.2
Published
Provider plugin for the Serverless Framework v1.x which adds support for Firebase Cloud Functions.
Downloads
19
Maintainers
Readme
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.js
const path = require('path');
const slsw = require('serverless-webpack');
module.exports = {
entry: slsw.lib.entries,
resolve: {
extensions: [
'.js',
'.json',
'.ts',
'.tsx'
]
},
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: '[name].js'
},
target: 'node',
module: {
rules: [
{
test: /\.ts(x?)$/,
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
- [x] Use webpack to deploy function with packed dependencies.
- [x] Deploy functions clean, without other handler sources.
- [x] Add PubSub functions support.
- [x] Base on pure Firebase Tools API.
- [x] 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.