astro/packages/integrations/deno/README.md
Chris Swithinbank 1f9e4857ff
Integration README fixes (#3865)
* Remove stray XML tag in sitemap integration README

* Fix link errors

* Add changeset
2022-07-08 21:56:24 +02:00

3.9 KiB

@astrojs/deno 🦖

This adapter allows Astro to deploy your SSR site to Deno targets.

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), Astro requires an adapter that matches your deployment runtime.

Deno 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

First, install the @astrojs/deno package using your package manager. If you're using npm or aren't sure, run this in the terminal:

npm install @astrojs/deno

Then, install this adapter in your astro.config.* file using the adapter property:

astro.config.mjs

import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';

export default defineConfig({
  // ...
  adapter: deno()
});

Usage

After performing a build there will be a dist/server/entry.mjs module. You can start a server by importing this module in your Deno app:

import './dist/entry.mjs';

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:

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.

astro.config.mjs

import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';

export default defineConfig({
  adapter: deno({
    //options go here
  })
});
start

This adapter automatically starts a server when it is imported. You can turn this off with the start option:

import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';

export default defineConfig({
  adapter: deno({
    start: false
  })
});

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:

import { serve } from "https://deno.land/std@0.132.0/http/server.ts";
import { handle } from './dist/entry.mjs';

serve((req: Request) => {
  // Check the request, maybe do static file handling here.

  return handle(req);
});
port and hostname

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.

import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';

export default defineConfig({
  adapter: deno({
    port: 8081,
    hostname: 'myhost'
  })
});

Examples

The Astro Deno example includes a preview:deno command that runs the entry script directly. Run npm run build then npm run preview:deno to run the production deno server.

Troubleshooting

Contributing

This package is maintained by Astro's Core team. You're welcome to submit an issue or PR!

Changelog