Skip to content

damack/now-lambda-runner

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

now-lambda-runner

A tool for locally testing now lambdas.

Installation

Install the tool via

> npm install -g now-lambda-runner

Usage

Let's say that we have the following now.json file:

{
  "version": 2,
  "builds": [
    { "src": "static/assets/**/*.*", "use": "@now/static" },
    { "src": "static/assets/*.*", "use": "@now/static" },
    { "src": "static/*.*", "use": "@now/static" },
    { "src": "api/*.js", "use": "@now/node" },
    { "src": "*.js", "use": "@now/node" },
    { "src": "*.html", "use": "@now/static" }
  ],
  "routes": [
    { "src": "/api/login", "dest": "/api/login.js" },
    { "src": "/api/demo", "dest": "/api/demo.js" },
    { "src": "/static/assets/(.*)", "dest": "/static/assets/$1"},
    { "src": "/static/(.*)", "dest": "/static/$1"},
    { "src": "/e/resources/(?<resource>[^/]*)", "dest": "/static/resources/$resource"},
    { "src": "/e/(.*)?", "dest": "/editor.js?id=$1"},
    { "src": "/docs", "dest": "/docs.html"},
    { "src": "/(.*)", "dest": "/index.html"}
  ]
}

We have to go to the folder containing that now.json file and run

> now-lambda

The result is as follows:

-----------------------------------
Routes:
  http://localhost:8004/api/login
  http://localhost:8004/api/demo
  http://localhost:8004/static/assets/(.*)
  http://localhost:8004/static/(.*)
  http://localhost:8004/e/resources/(?<resource>[^/]*)
  http://localhost:8004/e/(.*)?
  http://localhost:8004/docs
  http://localhost:8004/(.*)
-----------------------------------

And if we run the following curl request:

curl -i http://localhost:8004/e/foobar

we get editor.js lambda executed. The server reports:

=> /e/foobar === /e/(.*)?
   @now/node("/editor.js?id=foobar")

Here's is a list of the things that happen when now-lambda process your now.json file:

  • It spins up an expressjs server locally on your machine
  • It starts reading the routes field in the now.json file and defines route handlers for each of the routes.
  • When a route matches it reads the builds field to figure out if it has to server statically the file or it must run the lambda.
  • The module only understands @now/static and @now/node. If there is another builder used the file is considered a static resource and it gets served directly.

now-lambda does not:

  • Use the real now builders
  • Does not connect to now's servers

Caveats

  • now-lambda is a very light abstraction on top of Express. It is possible that some of the route matching works in a different way.
  • now-lambda sends Express's request and response objects. In reality when you deploy your app those objects are provided by Node's http module. For example req.send will not work when you deploy to Zeit because .send is not a method of http.

CLI arguments

  • --config - path to now.json file
  • --port - by default the local server listens on port 8004. You can change it via this argument.

About

A tool for locally testing now lambdas

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 98.8%
  • Other 1.2%