From 8b945f577a6743e3c9acff233665e6af1b3bb012 Mon Sep 17 00:00:00 2001 From: patak Date: Sun, 13 Mar 2022 08:01:21 +0100 Subject: [PATCH] fix: use relative paths in _metadata.json (#7299) --- packages/vite/src/node/optimizer/index.ts | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index fc2153118dbabc..6b4448234a0944 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -521,7 +521,7 @@ export async function createOptimizeDepsRun( function commitProcessingDepsCacheSync() { // Rewire the file paths from the temporal processing dir to the final deps cache dir const dataPath = path.join(processingCacheDir, '_metadata.json') - writeFile(dataPath, stringifyOptimizedDepsMetadata(metadata)) + writeFile(dataPath, stringifyOptimizedDepsMetadata(metadata, depsCacheDir)) // Processing is done, we can now replace the depsCacheDir with processingCacheDir if (fs.existsSync(depsCacheDir)) { const rmSync = fs.rmSync ?? fs.rmdirSync // TODO: Remove after support for Node 12 is dropped @@ -640,19 +640,33 @@ function parseOptimizedDepsMetadata( depsCacheDir: string, processing: Promise ) { - const metadata = JSON.parse(jsonMetadata) + const metadata = JSON.parse(jsonMetadata, (key: string, value: string) => { + // Paths can be absolute or relative to the deps cache dir where + // the _metadata.json is located + if (key === 'file' || key === 'src') { + return normalizePath(path.resolve(depsCacheDir, value)) + } + return value + }) for (const o of Object.keys(metadata.optimized)) { metadata.optimized[o].processing = processing } return { ...metadata, discovered: {}, processing } } -function stringifyOptimizedDepsMetadata(metadata: DepOptimizationMetadata) { +function stringifyOptimizedDepsMetadata( + metadata: DepOptimizationMetadata, + depsCacheDir: string +) { return JSON.stringify( metadata, (key: string, value: any) => { - if (key === 'processing' || key === 'discovered') return - + if (key === 'processing' || key === 'discovered') { + return + } + if (key === 'file' || key === 'src') { + return normalizePath(path.relative(depsCacheDir, value)) + } return value }, 2