2022-06-30 12:02:39 -04:00
# @astrojs/deno 🦖
This adapter allows Astro to deploy your SSR site to Deno targets.
2022-09-03 17:23:44 -03:00
Learn how to deploy your Astro site in our [Deno Deploy deployment guide ](https://docs.astro.build/en/guides/deploy/deno/ ).
2022-06-30 12:02:39 -04:00
- < strong > [Why Astro Deno ](#why-astro-deno )</ strong >
- < strong > [Installation ](#installation )</ strong >
- < strong > [Usage ](#usage )</ strong >
- < strong > [Configuration ](#configuration )</ strong >
- < strong > [Examples ](#examples )</ strong >
- < strong > [Troubleshooting ](#troubleshooting )</ strong >
- < strong > [Contributing ](#contributing )</ strong >
- < strong > [Changelog ](#changelog )</ strong >
## Why Astro Deno
If you're using Astro as a static site builder—its behavior out of the box—you don't need an adapter.
If you wish to [use server-side rendering (SSR) ](https://docs.astro.build/en/guides/server-side-rendering/ ), Astro requires an adapter that matches your deployment runtime.
[Deno ](https://deno.land/ ) is a runtime similar to Node, but with an API that's more similar to the browser's API. This adapter provides access to Deno's API and creates a script to run your project on a Deno server.
## Installation
2022-09-06 09:53:47 -03:00
Add the Deno adapter to enable SSR in your Astro project with the following `astro add` command. This will install the adapter and make the appropriate changes to your `astro.config.mjs` file in one step.
2022-07-11 21:10:34 +02:00
2022-09-22 04:16:02 -07:00
```sh
# Using NPM
2022-09-06 09:53:47 -03:00
npx astro add deno
2022-09-22 04:16:02 -07:00
# Using Yarn
yarn astro add deno
# Using PNPM
pnpm astro add deno
2022-06-30 12:02:39 -04:00
```
2022-09-06 09:53:47 -03:00
If you prefer to install the adapter manually instead, complete the following two steps:
1. Install the Deno adapter to your project’ s dependencies using your preferred package manager. If you’ re using npm or aren’ t sure, run this in the terminal:
2023-06-26 11:34:13 +08:00
```bash
npm install @astrojs/deno
```
2022-09-06 09:53:47 -03:00
1. Update your `astro.config.mjs` project configuration file with the changes below.
2023-06-26 11:34:13 +08:00
```js ins={3,6-7}
// astro.config.mjs
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno ';
2022-09-06 09:53:47 -03:00
2023-06-26 11:34:13 +08:00
export default defineConfig({
output: 'server',
adapter: deno(),
});
```
2022-09-06 09:53:47 -03:00
2022-11-22 15:56:55 +01:00
Next, update your `preview` script in `package.json` to run `deno` :
```json ins={8}
// package.json
{
// ...
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs"
}
}
```
You can now use this command to preview your production Astro site locally with Deno.
```bash
npm run preview
```
2023-06-26 11:34:13 +08:00
2022-06-30 12:02:39 -04:00
## Usage
2022-07-08 21:56:24 +02:00
After [performing a build ](https://docs.astro.build/en/guides/deploy/#building-your-site-locally ) there will be a `dist/server/entry.mjs` module. You can start a server by importing this module in your Deno app:
2022-06-30 12:02:39 -04:00
```js
2023-08-04 15:14:31 +02:00
import './dist/server/entry.mjs';
2022-06-30 12:02:39 -04:00
```
See the `start` option below for how you can have more control over starting the Astro server.
You can also run the script directly using deno:
2022-07-11 21:10:34 +02:00
```sh
2022-06-30 12:02:39 -04:00
deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs
```
## Configuration
To configure this adapter, pass an object to the `deno()` function call in `astro.config.mjs` .
```js
2023-07-01 16:34:49 +02:00
// astro.config.mjs
2022-06-30 12:02:39 -04:00
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno ';
export default defineConfig({
2022-07-25 00:18:02 -04:00
output: 'server',
2022-06-30 12:02:39 -04:00
adapter: deno({
//options go here
2023-06-26 11:34:13 +08:00
}),
2022-06-30 12:02:39 -04:00
});
```
2022-08-08 14:07:38 -03:00
### start
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
This adapter automatically starts a server when it is imported. You can turn this off with the `start` option:
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
```js
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno ';
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
export default defineConfig({
output: 'server',
adapter: deno({
2023-06-26 11:34:13 +08:00
start: false,
}),
2022-08-08 14:07:38 -03:00
});
```
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
If you disable this, you need to write your own Deno web server. Import and call `handle` from the generated entry script to render requests:
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
```ts
2023-06-26 11:34:13 +08:00
import { serve } from 'https://deno.land/std@0 .167.0/http/server.ts';
2023-08-04 15:14:31 +02:00
import { handle } from './dist/server/entry.mjs';
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
serve((req: Request) => {
// Check the request, maybe do static file handling here.
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
return handle(req);
});
```
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
### port and hostname
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
You can set the port (default: `8085` ) and hostname (default: `0.0.0.0` ) for the deno server to use. If `start` is false, this has no effect; your own server must configure the port and hostname.
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
```js
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno ';
2022-06-30 12:02:39 -04:00
2022-08-08 14:07:38 -03:00
export default defineConfig({
output: 'server',
adapter: deno({
port: 8081,
2023-06-26 11:34:13 +08:00
hostname: 'myhost',
}),
2022-08-08 14:07:38 -03:00
});
2022-06-30 12:02:39 -04:00
```
## Examples
2022-11-24 16:52:22 +08:00
The [Astro Deno ](https://github.com/withastro/astro/tree/main/examples/deno ) example includes a `preview` command that runs the entry script directly. Run `npm run build` then `npm run preview` to run the production deno server.
2022-06-30 12:02:39 -04:00
## Troubleshooting
2022-09-26 09:02:05 -04:00
For help, check out the `#support` channel on [Discord ](https://astro.build/chat ). Our friendly Support Squad members are here to help!
2022-07-11 21:10:34 +02:00
You can also check our [Astro Integration Documentation][astro-integration] for more on integrations.
2022-06-30 12:02:39 -04:00
## Contributing
This package is maintained by Astro's Core team. You're welcome to submit an issue or PR!
## Changelog
2022-07-11 21:10:34 +02:00
See [CHANGELOG.md ](CHANGELOG.md ) for a history of changes to this integration.
2022-06-30 12:02:39 -04:00
[astro-integration]: https://docs.astro.build/en/guides/integrations-guide/