Package Exports
- @sveltejs/adapter-netlify
Readme
adapter-netlify
Adapter for Svelte apps that creates a Netlify app, using a function for dynamic server rendering. A future version might use a function per route, though it's unclear if that has any real advantages.
This is very experimental; the adapter API isn't at all fleshed out, and things will definitely change.
Installation
⚠️ For the time being, the latest version of adapter-netlify is at the @next tag. If you get the error
config.kit.adapter should be an object with an "adapt" method., this is a sign that you are using the wrong version (eg1.0.0-next.0instead of1.0.0-next.9).
⚠️ Netlify defaults to Node 12.16. SvelteKit requires Node v12.20 to build. You can pin the Node version with a
.node-versionor.nvmrcfile:echo "14" > .nvmrcor set theNODE_ENVenvironment variable.
npm i -D @sveltejs/adapter-netlify@nextYou can then configure it inside of svelte.config.js:
import adapter from '@sveltejs/adapter-netlify';
export default {
kit: {
adapter: adapter(), // currently the adapter does not take any options
target: '#svelte'
}
};Then, make sure you have a netlify.toml file in the project root. This will determine where to write static assets and functions to based on the build.publish and build.functions settings, as per this sample configuration:
[build]
command = "npm run build"
publish = ".svelte-kit/netlify/build/"
functions = ".svelte-kit/netlify/functions/"In this example, we placed the build and functions folders under .svelte-kit/netlify. If you specify another location, you will probably also want to add them to your .gitignore.
Netlify alternatives to SvelteKit functionality
You may build your app using functionality provided directly by SvelteKit without relying on any Netlify functionality. Using the SvelteKit versions of these features will allow them to be used in dev mode, tested with integration tests, and to work with other adapters should you ever decide to switch away from Netlify. However, in some scenarios you may find it beneficial to use the Netlify versions of these features. One example would be if you're migrating an app that's already hosted on Netlify to SvelteKit.
Using Netlify Redirect Rules
During compilation a required "catch all" redirect rule is automatically appended to your _redirects file. (If it doesn't exist yet, it will be created.) That means:
[[redirects]]innetlify.tomlwill never match as_redirectshas a higher priority. So always put your rules in the_redirectsfile._redirectsshouldn't have any custom "catch all" rules such as/* /foobar/:splat. Otherwise the automatically appended rule will never be applied as Netlify is only processing the first matching rule.
Using Netlify Forms
- Create your Netlify HTML form as described here, e.g. as
/routes/contact.svelte. (Don't forget to add the hiddenform-nameinput element!) - Netlify's build bot parses your HTML files at deploy time, which means your form must be prerendered as HTML. You can either add
export const prerender = trueto yourcontact.svelteto prerender just that page or set thekit.prerender.force: trueoption to prerender all pages. - If your Netlify form has a custom success message like
<form netlify ... action="/success">then ensure the corresponding/routes/success.svelteexists and is prerendered.
Advanced Configuration
esbuild
As an escape hatch, you may optionally specify a function which will receive the final esbuild options generated by this adapter and returns a modified esbuild configuration. The result of this function will be passed as-is to esbuild. The function can be async.
For example, you may wish to add a plugin:
adapterNetlify({
esbuild(defaultOptions) {
return {
...defaultOptions,
plugins: []
};
}
});The default options for this version are as follows:
{
entryPoints: ['.svelte-kit/netlify/entry.js'],
outfile: `pathToFunctionsFolder/render/index.js`,
bundle: true,
inject: ['pathTo/shims.js'],
platform: 'node'
}