From b781b2f1ae2155aeef22da02b3a436c140ac000b Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 13 Sep 2021 14:21:23 -0700 Subject: [PATCH] [feat] adapter-node entryPoint option (#2414) --- .changeset/young-cougars-poke.md | 5 +++++ packages/adapter-node/README.md | 21 +++++++++++++-------- packages/adapter-node/index.d.ts | 1 + packages/adapter-node/index.js | 5 +++-- 4 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 .changeset/young-cougars-poke.md diff --git a/.changeset/young-cougars-poke.md b/.changeset/young-cougars-poke.md new file mode 100644 index 000000000000..3fc90e4e53da --- /dev/null +++ b/.changeset/young-cougars-poke.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +[feat] add entryPoint option for custom servers diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index b53e3a8f6f3b..2a0ec3eec462 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -27,6 +27,10 @@ export default { ## Options +### entryPoint + +The server entry point. Allows you to provide a [custom server implementation](#middleware). 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. @@ -49,28 +53,29 @@ You can specify different environment variables if necessary using the `env` opt The adapter exports a middleware `(req, res, next) => {}` that's compatible with [Express](https://github.com/expressjs/expressjs.com) / [Connect](https://github.com/senchalabs/connect) / [Polka](https://github.com/lukeed/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 bundle as middleware, from `./build/middlewares.js`. +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](#entryPoint) to bundle your custom server entry point. -``` -import { assetsMiddleware, prerenderedMiddleware, kitMiddleware } from './build/middlewares.js'; +```js +// 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(); +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!') + res.end('This is not Svelte!'); }); app.use(assetsMiddleware, prerenderedMiddleware, kitMiddleware); -app.listen(3000) +app.listen(3000); ``` For using middleware in dev mode, [see the FAQ](https://kit.svelte.dev/faq#how-do-i-use-x-with-sveltekit-how-do-i-use-middleware). diff --git a/packages/adapter-node/index.d.ts b/packages/adapter-node/index.d.ts index 99d467b63991..0c7cc13f5e90 100644 --- a/packages/adapter-node/index.d.ts +++ b/packages/adapter-node/index.d.ts @@ -2,6 +2,7 @@ import { Adapter } from '@sveltejs/kit'; import { BuildOptions } from 'esbuild'; interface AdapterOptions { + entryPoint?: string; out?: string; precompress?: boolean; env?: { diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 70e9801ac0b1..cc2dd47d6fde 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -22,6 +22,7 @@ const pipe = promisify(pipeline); /** @type {import('.')} */ export default function ({ + entryPoint = '.svelte-kit/node/index.js', out = 'build', precompress, env: { path: path_env = 'SOCKET_PATH', host: host_env = 'HOST', port: port_env = 'PORT' } = {}, @@ -74,10 +75,10 @@ export default function ({ const build_options = esbuild_config ? await esbuild_config(defaultOptions) : defaultOptions; await esbuild.build(build_options); - utils.log.minor('Building SvelteKit reference server'); + utils.log.minor('Building SvelteKit server'); /** @type {BuildOptions} */ const default_options_ref_server = { - entryPoints: ['.svelte-kit/node/index.js'], + entryPoints: [entryPoint], outfile: join(out, 'index.js'), bundle: true, external: ['./middlewares.js'], // does not work, eslint does not exclude middlewares from target