Home

Awesome

Babel Runtime for Serverless

serverless

Features

Install

Note: Serverless v0.5.0 or higher is required.

Usage

All you need is to set runtime property of s-function.json to babel. You could use the classic style handler when you need to call context.done() or the modern style when your functions should return a promise.

Classic Style

/* handler.js */
'use strict';

module.exports.handler = function(event, context) {

  /* Everything is the same but better */
  let [name, age, isAdmin] = ['bob', 23, false];
  let user = {name, age};

  return context.done(null, {
    isAdmin,
    userName: user.name,
    userAge: user.age
  });
};

Modern JS Style

/* event.json */
{
  "repos": [
    "serverless/serverless",
    "serverless/serverless-runtime-babel"
  ]
}
/* handler.js */
import "babel-polyfill"
import request from "request-promise"

const headers = {
  'User-Agent': 'Serverless'
};

export default ({repos}) => {

  return Promise.all(repos.map(repo => {
    let uri = `https://api.github.com/repos/${repo}`

    return request({headers, uri, json: true})
      .then(({stargazers_count}) => ({repo, stars: stargazers_count}))
  }))
​
}

Scaffold

You can use serverless function create as usual — it will promt you for a runtime unless you add the -r babel flag.

Examples

Options

Configuration options can be used by setting the custom.runtime of s-function.json. The following options are available:

Browserify Options

Browserify options can be included as normal configuration options to the runtime object. The following options are supported:

For more information on these options, please visit the Browserify Documentaton.

Example

Example Babel Runtime configuration with default values:

{
  /*s-function.json*/
  /*...*/
  "runtime": "babel",
  "custom": {
    "runtime": {
      "babel": { 
      	"presets": ["es2015"]
      },
      "handlerExt": "js",
      "requires": [],
      "plugins": [],
      "transforms": [],
      "exclude": [],
      "ignore": [
        "aws-sdk"
      ],
      "extensions": [],
      "minify": true
    }
  },
  /*...*/
}