Adapter for SvelteKit apps that generates a standalone Node server.
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'
}
})
}
};
The server entry point. Allows you to provide a custom server implementation. Defaults to the provided reference server.
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.
Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to false
.
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.
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.
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}"`
}
}