From 9539daa85e1e1a5dec0e3c3d8fbb7d24e18c48ed Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Tue, 22 Feb 2022 15:25:16 +0800 Subject: [PATCH] chore: anticipate vite cache changes (#278) --- .../package-json-svelte-field.spec.ts | 20 +++++++++++++++++-- .../vite-plugin-svelte/src/utils/optimizer.ts | 15 ++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts b/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts index 180b765b6..35d9f060c 100644 --- a/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts +++ b/packages/e2e-tests/package-json-svelte-field/__tests__/package-json-svelte-field.spec.ts @@ -8,8 +8,7 @@ test('should render component imported via svelte field in package.json', async if (!isBuild) { test('should optimize nested cjs deps of excluded svelte deps', () => { - const vitePrebundleMetadata = path.resolve(__dirname, '../node_modules/.vite/_metadata.json'); - const metadataFile = fs.readFileSync(vitePrebundleMetadata, 'utf8'); + const metadataFile = readVitePrebundleMetadata(); const metadata = JSON.parse(metadataFile); const optimizedPaths = Object.keys(metadata.optimized); expect(optimizedPaths).not.toContain('e2e-test-dep-svelte-nested'); @@ -19,3 +18,20 @@ if (!isBuild) { ); }); } + +function readVitePrebundleMetadata() { + const metadataPaths = [ + '../node_modules/.vite/_metadata.json', + '../node_modules/.vite/deps/_metadata.json' // vite 2.9 + ]; + for (const metadataPath of metadataPaths) { + try { + const vitePrebundleMetadata = path.resolve(__dirname, metadataPath); + const metadataFile = fs.readFileSync(vitePrebundleMetadata, 'utf8'); + return metadataFile; + } catch { + // ignore + } + } + throw new Error('Unable to find vite prebundle metadata'); +} diff --git a/packages/vite-plugin-svelte/src/utils/optimizer.ts b/packages/vite-plugin-svelte/src/utils/optimizer.ts index dd2ade41b..b45216059 100644 --- a/packages/vite-plugin-svelte/src/utils/optimizer.ts +++ b/packages/vite-plugin-svelte/src/utils/optimizer.ts @@ -16,11 +16,10 @@ const PREBUNDLE_SENSITIVE_OPTIONS: (keyof ResolvedOptions)[] = [ export async function handleOptimizeDeps(options: ResolvedOptions, viteConfig: ResolvedConfig) { if (!options.experimental.prebundleSvelteLibraries || !viteConfig.cacheDir) return; - const viteMetadataPath = path.resolve(viteConfig.cacheDir, '_metadata.json'); + const viteMetadataPath = findViteMetadataPath(viteConfig.cacheDir); + if (!viteMetadataPath) return; - if (!fs.existsSync(viteMetadataPath)) return; - - const svelteMetadataPath = path.resolve(viteConfig.cacheDir, '_svelte_metadata.json'); + const svelteMetadataPath = path.resolve(viteMetadataPath, '../_svelte_metadata.json'); const currentSvelteMetadata = JSON.stringify(generateSvelteMetadata(options), (_, value) => { return typeof value === 'function' ? value.toString() : value; }); @@ -41,3 +40,11 @@ function generateSvelteMetadata(options: ResolvedOptions) { } return metadata; } + +function findViteMetadataPath(cacheDir: string) { + const metadataPaths = ['_metadata.json', 'deps/_metadata.json']; + for (const metadataPath of metadataPaths) { + const viteMetadataPath = path.resolve(cacheDir, metadataPath); + if (fs.existsSync(viteMetadataPath)) return viteMetadataPath; + } +}