This is a development tool for Next.js based projects that are destined for static export and serving using Zeit's Now static hosting (which uses serve-handler under the hood).
Specifically, nerve will read a configuration, apply the static rules (like headers and redirects) to requests and serve your Next.js project.
Important: this tool is only for the development phase.
I wanted to serve a service-worker.js from the root of the project, which I could do once I had exported the Next project, but not during development. I had a server but it was the same boilerplate so I decided to codify my solution.
Install Nerve as a dev dependency or a global dependencies and run the executable nerve command in your Next.js project directory:
$ npm install --global @remy/nerve
$ nerve
DONE Compiled successfully in 2585ms
INFO: Discovered configuration in `now.json`
The config setting "trailingSlash" must be set to false during development. This is because when the client side Next.js / - Next responds with a 404.
Once nerve is running, I can test with the curl command:
$ curl http://localhost:3000 -I # response from Next handler
HTTP/1.1 200 OK
X-Powered-By: Next.js 6.1.1
Cache-Control: no-store, must-revalidate
Content-Type: text/html; charset=utf-8
$ curl http://localhost:3000/service-worker.js -I # response from serve config
HTTP/1.1 200 OK
Content-Disposition: inline; filename="service-worker.js"
Content-Type: application/javascript; charset=utf-8
Cache-Control: no-cache
And the now.json config I'm using:
{
"type": "static",
"static": {
"trailingSlash": false,
"headers": [
{
"source": "/static/service-worker.js",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
}
],
"rewrites": [
{
"source": "/service-worker.js",
"destination": "/static/service-worker.js"
},
]
}
}
Nerve, as per serve, will for a config in package.json, now.json and serve.json (note that Nerve does not support command line arguments).
A full list of options can be seen here