# Deploying Node.js serverless functions to Netlify

Deploying Node.js serverless functions to Netlify involes a few steps:

## Creating the project

For new workspaces you can create a Nx workspace with serverless function with one command:

```shell
npx create-nx-workspace@latest my-functions \
--preset=@nx/netlify \
--site=my-site \ # Site ID or name to deploy the functions
```

## Configuring existing projects

**Skip this step if you are not configuring an existing project.**

You will need to install `@nx/netlify` if you haven't already.

{% tabs %}
{% tab label="npm" %}

```shell
npm i -D @nx/netlify
```

{% /tab %}
{% tab label="yarn" %}

```shell
yarn add -D @nx/netlify
```

{% /tab %}
{% tab label="pnpm" %}

```shell
pnpm add -D @nx/netlify
```

{% /tab %}
{% /tabs %}

- Add serverless configuration by running the following command:

```shell
nx generate @nx/netlify:setup-serverless
```

- Create a new netlify serverless project with:

```shell
nx generate @nx/netlfiy:serverless
```

This will do a few things:

1. Create a new serverless function in `src/functions`.
2. Add the `netlify.toml` in the root of the project
3. Update your `project.json` to have 2 new targets `serve` & `deploy`.

## Configure your Netlify deploy settings

If you **do not** have a _site_ setup within your workspace, go inside the Netlify dashboard, and create/use an existing site where your serverless functions will be deployed.

In your `project.json` you can update your deploy site by going to the `deploy` target adding `--site=my-site-name-or-id` replace **my-site-name-or-id** to what you have in your Netlify dashboard.

It should look similar to:

```json
    "deploy": {
      "dependsOn": ["lint"],
      "command": "npx netlify deploy --prod-if-unlocked --site=my-site"
    }
```

## Deployment

To view your functions locally you run:

```shell
nx serve
```

Inside your `netlify.toml` your functions _path_ should be already configured.
To deploy them to Netlify you would run:

```shell
nx deploy
```

The netlify CLI will output the link where you functions can be accessed. You can either click that link or open your browser and navigate to it!
