Package Exports
- @sveltejs/adapter-node
- @sveltejs/adapter-node/package.json
Readme
@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 buildYou 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 buildMiddleware
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 buildChangelog
The Changelog for this package is available on GitHub.