A tool for locally testing now lambdas.
Install the tool via
> npm install -g now-lambda-runner
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 routesfield in thenow.jsonfile and defines route handlers for each of the routes.
- When a route matches it reads the buildsfield to figure out if it has to server statically the file or it must run the lambda.
- The module only understands @now/staticand@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
- now-lambdais a very light abstraction on top of Express. It is possible that some of the route matching works in a different way.
- now-lambdasends Express's- requestand- responseobjects. In reality when you deploy your app those objects are provided by Node's http module. For example- req.sendwill not work when you deploy to Zeit because- .sendis not a method of http.
- --config- path to- now.jsonfile
- --port- by default the local server listens on port 8004. You can change it via this argument.