diff --git a/.changeset/stale-books-flash.md b/.changeset/stale-books-flash.md new file mode 100644 index 000000000000..1c612e23d9f3 --- /dev/null +++ b/.changeset/stale-books-flash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +support all esbuild build options diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index ec1ec3bae1a1..3fe2e26f23ab 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -13,9 +13,19 @@ import adapter from '@sveltejs/adapter-node'; export default { kit: { adapter: adapter({ - // default options are shown + // default options are shown below out: 'build', - precompress: false + precompress: false, + esbuildOptions: { + outdir: out, + bundle: true, + format: 'esm', + platform: 'node', + target: 'node12', + external: [ + /* package.json#dependencies */ + ] + } }) } }; @@ -31,6 +41,21 @@ The directory to build the server to. It defaults to `build` — i.e. `node buil Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to `false`. +### esbuildOptions + +Any custom [esbuild build](https://esbuild.github.io/api/#build-api) options. It defaults to: + +```js +{ + outdir: out /* = 'build' */, // Unless a outfile is specified + bundle: true, + format: 'esm', + platform: 'node', + target: 'node12', + external: [ /* package.json#dependencies */ ] +} +``` + ## Environment variables 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: diff --git a/packages/adapter-node/index.d.ts b/packages/adapter-node/index.d.ts index 2132e79d9a73..aaa150f5ff2a 100644 --- a/packages/adapter-node/index.d.ts +++ b/packages/adapter-node/index.d.ts @@ -1,6 +1,7 @@ declare function plugin(options?: { out?: string; precompress?: boolean; + esbuildOptions?: import('esbuild').BuildOptions; }): import('@sveltejs/kit').Adapter; export = plugin; diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 095109c10572..d62a8674ab8c 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -11,11 +11,26 @@ const pipe = promisify(pipeline); /** * @param {{ - * out?: string; - * precompress?: boolean + * out?: string, + * precompress?: boolean, + * esbuildOptions?: import('esbuild').BuildOptions * }} options */ -export default function ({ out = 'build', precompress } = {}) { +export default function ({ + out = 'build', + precompress, + esbuildOptions: { + outfile, + outdir = typeof outfile === 'undefined' ? out : undefined, + bundle = true, + format = 'esm', + platform = 'node', + target = 'node12', + external = Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), + entryPoints = ['.svelte-kit/node/index.js'], + ...esbuildOptions + } = {} +} = {}) { /** @type {import('@sveltejs/kit').Adapter} */ const adapter = { name: '@sveltejs/adapter-node', @@ -35,14 +50,17 @@ export default function ({ out = 'build', precompress } = {}) { const files = fileURLToPath(new URL('./files', import.meta.url)); utils.copy(files, '.svelte-kit/node'); await esbuild.build({ - entryPoints: ['.svelte-kit/node/index.js'], - outfile: join(out, 'index.js'), - bundle: true, - external: Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), - format: 'esm', - platform: 'node', - target: 'node12', + ...esbuildOptions, + outdir, + outfile, + bundle, + format, + platform, + target, + external, + entryPoints, define: { + ...esbuildOptions.define, esbuild_app_dir: '"' + config.kit.appDir + '"' } });