0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-01-06 22:10:10 -05:00
astro/packages/integrations/netlify
Matthew Phillips f5afaf2498
Support re-exporting astro components containing client components (#3625)
* Support re-exporting astro components containing client components

* Include metadata for markdown too

* Fix ssr, probably

* Inject post-build

* Remove tagName custom element test

* Allows using the constructor for lit elements

* Fix hoisted script scanning

* Pass through plugin context

* Get edge functions working in the edge tests

* Fix types for the edge function integration

* Upgrade the compiler

* Upgrade compiler version

* Better release notes for lit

* Update .changeset/unlucky-hairs-camp.md

Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>

* Properly test that the draft was not rendered

* Prevent from rendering draft posts

* Add a changeset about the build perf improvement.

Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
2022-06-21 08:32:05 -04:00
..
src Support re-exporting astro components containing client components (#3625) 2022-06-21 08:32:05 -04:00
test Support re-exporting astro components containing client components (#3625) 2022-06-21 08:32:05 -04:00
.npmignore Ignore test folder in Netlify 2022-04-19 11:45:19 -04:00
CHANGELOG.md [ci] release (#3604) 2022-06-16 12:05:10 -04:00
package.json Support re-exporting astro components containing client components (#3625) 2022-06-21 08:32:05 -04:00
README.md Adds support base64 encoding in Netlify Functions (#3592) 2022-06-15 19:49:09 +00:00
tsconfig.json [ci] format 2022-04-22 14:04:54 +00:00

@astrojs/netlify

Deploy your server-side rendered (SSR) Astro app to Netlify.

Use this adapter in your Astro configuration file, alongside a valid deployment URL:

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

export default defineConfig({
	adapter: netlify(),
});

After you build your site the netlify/ folder will contain Netlify Functions in the netlify/functions/ folder.

Now you can deploy!

netlify deploy --build

Edge Functions

Netlify has two serverless platforms, Netlify Functions and Netlify Edge Functions. With Edge Functions your code is distributed closer to your users, lowering latency. You can use Edge Functions by changing the import in your astro configuration file:

import { defineConfig } from 'astro/config';
- import netlify from '@astrojs/netlify/functions';
+ import netlify from '@astrojs/netlify/edge-functions';

export default defineConfig({
	adapter: netlify(),
});

Configuration

dist

We build to a dist directory at the base of your project. To change this, use the dist option:

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

export default defineConfig({
  adapter: netlify({
    dist: new URL('./dist/', import.meta.url)
  })
});

And then point to the dist in your netlify.toml:

[functions]
  directory = "dist/functions"

binaryMediaTypes

This option is only needed for the Functions adapter and is not needed for Edge Functions.

Netlify Functions sending binary data in the body need to be base64 encoded. The @astrojs/netlify/functions adapter handles this automatically based on the Content-Type header.

We check for common mime types for audio, image, and video files. To include specific mime types that should be treated as binary data, include the binaryMediaTypes option with a list of binary mime types.

import fs from 'node:fs';

export function get() {
	const buffer = fs.readFileSync('../image.jpg');

  // Return the buffer directly, @astrojs/netlify will base64 encode the body
  return new Response(buffer, {
    status: 200,
		headers: {
			'content-type': 'image/jpeg'
		}
  });
}