Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/web-seven/serverless-firebase-functions
Serverless Firebase Functions
https://github.com/web-seven/serverless-firebase-functions
firebase-functions serverless typescript webpack
Last synced: 14 days ago
JSON representation
Serverless Firebase Functions
- Host: GitHub
- URL: https://github.com/web-seven/serverless-firebase-functions
- Owner: web-seven
- License: mit
- Created: 2019-07-19T14:02:59.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-10-15T16:32:25.000Z (over 5 years ago)
- Last Synced: 2025-01-21T11:45:49.175Z (25 days ago)
- Topics: firebase-functions, serverless, typescript, webpack
- Language: JavaScript
- Homepage:
- Size: 22.5 KB
- Stars: 12
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Serverless Firebase Functions Plugin
This plugin enables support for HTTP/PubSub NodeJS/TypeScript [Firebase Functions](https://firebase.google.com/products/functions/) within the [Serverless Framework](https://github.com/serverless/serverless).
## 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](https://www.npmjs.com/package/serverless-webpack) plugin for package sources
* Based on official [Firebase Tools](https://www.npmjs.com/package/firebase-tools) and [Firebase Admin](https://www.npmjs.com/package/firebase-admin)
* Support NPM and Yarn for packaging## Install
```bash
$ npm install serverless-firebase-functions --save-dev
```Add the plugin to your `serverless.yml` file:
```yaml
plugins:
- serverless-firebase-functions
- serverless-webpack
```## Configure
Firstly require to configure [serverless-webpack](https://www.npmjs.com/package/serverless-webpack) plugin.```js
// 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.
```yaml
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: someValuepackage:
individually: truefunctions:
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
```bash
$ 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.