Skip to content

Latest commit

 

History

History

adapter-node

@sveltejs/adapter-node

Adapter for SvelteKit apps that generates a standalone Node server.

Usage

Install with npm i -D @sveltejs/adapter-node@next, then add the adapter to your svelte.config.js:

// svelte.config.js
import adapter from '@sveltejs/adapter-node';

export default {
	kit: {
		adapter: adapter({
			// default options are shown
			out: 'build',
			precompress: false,
			env: {
				host: 'HOST',
				port: 'PORT'
			}
		})
	}
};

Options

entryPoint

The server entry point. Allows you to provide a custom server implementation. Defaults to the provided reference server.

out

The directory to build the server to. It defaults to build — i.e. node build would start the server locally after it has been created.

precompress

Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to false.

env

By default, the server will accept connections on 0.0.0.0 using port 3000. These can be customised with the PORT and HOST environment variables:

HOST=127.0.0.1 PORT=4000 node build

You can specify different environment variables if necessary using the env option:

env: {
	host: 'MY_HOST_VARIABLE',
	port: 'MY_PORT_VARIABLE'
}
MY_HOST_VARIABLE=127.0.0.1 MY_PORT_VARIABLE=4000 node build

Middleware

The adapter exports a middleware (req, res, next) => {} that's compatible with Express / Connect / Polka. Additionally, it also exports a reference server implementation using this middleware with a plain Node HTTP server.

But you can use your favorite server framework to combine it with other middleware and server logic. You can import kitMiddleware, your ready-to-use SvelteKit middleware from the build directory. You can use the entryPoint option to bundle your custom server entry point.

// src/server.js
import { assetsMiddleware, prerenderedMiddleware, kitMiddleware } from '../build/middlewares.js';
import polka from 'polka';

const app = polka();

const myMiddleware = function (req, res, next) {
	console.log('Hello world!');
	next();
};

app.use(myMiddleware);

app.get('/no-svelte', (req, res) => {
	res.end('This is not Svelte!');
});

app.all('*', assetsMiddleware, prerenderedMiddleware, kitMiddleware);

// Express users can also write in a second way:
// app.use(assetsMiddleware, prerenderedMiddleware, kitMiddleware);

app.listen(3000);

For using middleware in dev mode, see the FAQ.

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:

adapterNode({
	esbuild(defaultOptions) {
		return {
			...defaultOptions,
			plugins: []
		};
	}
});

The default options for this version are as follows:

{
	entryPoints: ['.svelte-kit/node/index.js'],
	outfile: 'pathTo/index.js',
	bundle: true,
	external: allProductionDependencies, // from package.json
	format: 'esm',
	platform: 'node',
	target: 'node14',
	inject: ['pathTo/shims.js'],
	define: {
		esbuild_app_dir: `"${config.kit.appDir}"`
	}
}

Deploying

You will need the output directory (build by default), the project's package.json, and the production dependencies in node_modules to run the application. Production dependencies can be generated with npm ci --prod, you can also skip this step if your app doesn't have any dependencies. You can then start your app with

node build

Changelog

The Changelog for this package is available on GitHub.

License

MIT