From fa76c2c78b6a25f90213bcc38cb7a835818bc4ed Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 17 Aug 2022 12:36:14 -0400 Subject: [PATCH] avoid double import of `$env/dynamic/[mode]` modules (#5955) * WIP * this might work? * changeset * hoist, so returned function is sync --- .changeset/nasty-shoes-mate.md | 5 +++++ packages/kit/src/vite/dev/index.js | 28 ++++++++++++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 .changeset/nasty-shoes-mate.md diff --git a/.changeset/nasty-shoes-mate.md b/.changeset/nasty-shoes-mate.md new file mode 100644 index 000000000000..9702fe2dd076 --- /dev/null +++ b/.changeset/nasty-shoes-mate.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Prevent double import of env modules diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index cba73ba589b8..0c20b7a914fb 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -286,6 +286,20 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { } }); + const runtime_base = runtime_directory.startsWith(process.cwd()) + ? `/${path.relative('.', runtime_directory)}` + : `/@fs${ + // Windows/Linux separation - Windows starts with a drive letter, we need a / in front there + runtime_directory.startsWith('/') ? '' : '/' + }${runtime_directory}`; + + const { set_private_env } = await vite.ssrLoadModule(`${runtime_base}/env-private.js`); + const { set_public_env } = await vite.ssrLoadModule(`${runtime_base}/env-public.js`); + + const env = get_env(vite_config.mode, svelte_config.kit.env.publicPrefix); + set_private_env(env.private); + set_public_env(env.public); + return () => { const serve_static_middleware = vite.middlewares.stack.find( (middleware) => @@ -320,20 +334,6 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { ); } - // For some reason using runtime_prefix here is buggy, since Vite will later load the modules - // again with a slightly different url (with the drive letter) on windows - const runtime_base = `/@fs${ - // Windows/Linux separation - Windows starts with a drive letter, we need a / in front there - runtime_directory.startsWith('/') ? '' : '/' - }${runtime_directory}`; - - const { set_private_env } = await vite.ssrLoadModule(`${runtime_base}/env-private.js`); - const { set_public_env } = await vite.ssrLoadModule(`${runtime_base}/env-public.js`); - - const env = get_env(vite_config.mode, svelte_config.kit.env.publicPrefix); - set_private_env(env.private); - set_public_env(env.public); - /** @type {Partial} */ const user_hooks = resolve_entry(svelte_config.kit.files.hooks) ? await vite.ssrLoadModule(`/${svelte_config.kit.files.hooks}`)