serverless-firebase-functions

0.4.2 • Public • Published

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

  • 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.

Package Sidebar

Install

npm i serverless-firebase-functions

Weekly Downloads

1

Version

0.4.2

License

MIT

Unpacked Size

17.9 kB

Total Files

11

Last publish

Collaborators

  • evgheni