astro/packages/integrations/deno
2022-07-08 20:57:10 +00:00
..
src [ci] format 2022-06-27 21:22:26 +00:00
test Fix react dependencies to improve test reliability (#3673) 2022-06-22 09:11:48 -04:00
CHANGELOG.md [ci] release (#3774) 2022-06-30 11:39:44 -07:00
package.json [ci] format 2022-07-08 20:57:10 +00:00
README.md Integration README fixes (#3865) 2022-07-08 21:56:24 +02:00
tsconfig.json Deno adapter (#2934) 2022-03-30 08:42:19 -04:00

@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