From ad7aaaa5e152e98f33f7918287058c5470ce3082 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 16 Aug 2022 18:17:04 -0400 Subject: [PATCH 1/4] WIP --- packages/kit/src/vite/dev/index.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index 438c94fb0e7c..a44559427857 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -286,7 +286,7 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { } }); - return () => { + return async () => { const serve_static_middleware = vite.middlewares.stack.find( (middleware) => /** @type {function} */ (middleware.handle).name === 'viteServeStaticMiddleware' @@ -294,6 +294,15 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { remove_static_middlewares(vite.middlewares); + const runtime_base = path.relative('.', 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); + vite.middlewares.use(async (req, res) => { try { const base = `${vite.config.server.https ? 'https' : 'http'}://${ @@ -320,20 +329,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}`) From d88f857070ed14c16b99f792ed552e8f9dfdf182 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 16 Aug 2022 18:23:28 -0400 Subject: [PATCH 2/4] this might work? --- packages/kit/src/vite/dev/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index a44559427857..44c4aa8070ea 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -294,7 +294,12 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { remove_static_middlewares(vite.middlewares); - const runtime_base = path.relative('.', runtime_directory); + 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`); From 8e65e8693ec88e87b7857ba81de43248e19a3f15 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 16 Aug 2022 18:26:54 -0400 Subject: [PATCH 3/4] changeset --- .changeset/nasty-shoes-mate.md | 5 +++++ 1 file changed, 5 insertions(+) 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 From af28ffcbaaf4dcca5417a7f78476c12e7d44b1b5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 17 Aug 2022 11:52:18 -0400 Subject: [PATCH 4/4] hoist, so returned function is sync --- packages/kit/src/vite/dev/index.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index 44c4aa8070ea..c8f370250d02 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -286,7 +286,21 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { } }); - return async () => { + 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) => /** @type {function} */ (middleware.handle).name === 'viteServeStaticMiddleware' @@ -294,20 +308,6 @@ export async function dev(vite, vite_config, svelte_config, illegal_imports) { remove_static_middlewares(vite.middlewares); - 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); - vite.middlewares.use(async (req, res) => { try { const base = `${vite.config.server.https ? 'https' : 'http'}://${