A CLI Tool (based on Express) for running and testing portable Node.js functions locally Without needing to worry about writing an HTTP server or complicated request handling logic.
It helps spin up a local development server for quick testing of Functions from different providers, including:
Add the CLI Tool to your package.json
file using npm
.
npm install functions-runner
-
Create an
index.js
file with the following contents:exports.helloWorld = (req, res) => { res.send('Hello, World'); };
-
Run the following command:
npx functions-runner --target=helloWorld
-
Open http://localhost:8080/helloWorld in your browser and see Hello, World.
you can a start
script to package.json
, with configuration passed via
command-line arguments:
```js
"scripts": {
"start:dev": "functions-runner --target=helloWorld"
}
```
-
Use
npm run start:dev
to start the built-in local development server:npm run start:dev ... Serving function... Function: helloWorld URL: http://localhost:8080/
-
Send requests to this function using
curl
from another terminal window:curl localhost:8080/helloWorld # Output: Hello, World
You can configure the Functions Framework using command-line flags or environment variables. If you specify both, the environment variable will be ignored.
Command-line flag | Default | Description |
---|---|---|
--port |
8080 |
The port on which the Functions Framework listens for requests. e.g --port=3000
|
--target |
required | The name of the exported function to be invoked in response to requests. e.g --target=helloWorld
|
--targets |
optional | The name of the exported functions to be invoked in response to requests e.g --targets=helloWorld,function,greeting
|
--src |
dir defined by main in package.json
|
The path to index.js where the function(s) are exported from. e.g --src=dist/index.js
|
--provider |
GCP | Supported Serverless provider GCP, AWS . e.g --provider=aws
|
Add this scripts
to package.json
"build": "tsc",
"dev": "npm run build && npx functions-runner --target=helloWorld --src=dist/index.js",
"start": "npm run build && node dist/index.js"
don't forget to add this to tsconfig.json
"outDir": "dist/"