diff --git a/.changeset/smart-timers-promise.md b/.changeset/smart-timers-promise.md new file mode 100644 index 000000000000..51081ad6ef27 --- /dev/null +++ b/.changeset/smart-timers-promise.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +chore: use peer dependencies when linked diff --git a/packages/kit/package.json b/packages/kit/package.json index 8a6fc4f7248c..94dfbb0e51cb 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -15,6 +15,7 @@ "cookie": "^0.6.0", "devalue": "^4.3.2", "esm-env": "^1.0.0", + "import-meta-resolve": "^4.0.0", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 5d685e8ee0d2..9ac5d220d1ec 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1,9 +1,8 @@ import fs from 'node:fs'; import path from 'node:path'; -import { svelte } from '@sveltejs/vite-plugin-svelte'; +import * as imr from 'import-meta-resolve'; import colors from 'kleur'; -import * as vite from 'vite'; import { copy, mkdirp, posixify, read, resolve_entry, rimraf } from '../../utils/filesystem.js'; import { create_static_module, create_dynamic_module } from '../../core/env.js'; @@ -34,6 +33,7 @@ import { sveltekit_environment, sveltekit_paths } from './module_ids.js'; +import { pathToFileURL } from 'node:url'; const cwd = process.cwd(); @@ -122,6 +122,17 @@ const warning_preprocessor = { } }; +/** + * Resolve a dependency relative to the current working directory, + * rather than relative to this package + * @param {string} dependency + */ +async function resolve_peer_dependency(dependency) { + // @ts-expect-error the types are wrong + const resolved = await imr.resolve(dependency, pathToFileURL(process.cwd() + '/dummy.js')); + return import(resolved); +} + /** * Returns the SvelteKit Vite plugins. * @returns {Promise} @@ -153,7 +164,9 @@ export async function sveltekit() { ...svelte_config.vitePlugin }; - return [...svelte(vite_plugin_svelte_options), ...kit({ svelte_config })]; + const { svelte } = await resolve_peer_dependency('@sveltejs/vite-plugin-svelte'); + + return [...svelte(vite_plugin_svelte_options), ...(await kit({ svelte_config }))]; } // These variables live outside the `kit()` function because it is re-invoked by each Vite build @@ -174,9 +187,11 @@ let manifest_data; * - https://rollupjs.org/guide/en/#output-generation-hooks * * @param {{ svelte_config: import('types').ValidatedConfig }} options - * @return {import('vite').Plugin[]} + * @return {Promise} */ -function kit({ svelte_config }) { +async function kit({ svelte_config }) { + const vite = await resolve_peer_dependency('vite'); + const { kit } = svelte_config; const out = `${kit.outDir}/output`; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d818c36c6c2..0414163a8a27 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -425,6 +425,9 @@ importers: esm-env: specifier: ^1.0.0 version: 1.0.0 + import-meta-resolve: + specifier: ^4.0.0 + version: 4.0.0 kleur: specifier: ^4.1.5 version: 4.1.5