diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index 5592c438ece552..9a331e9db90ab4 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -1,6 +1,8 @@ +import path from 'node:path' import colors from 'picocolors' import _debug from 'debug' import glob from 'fast-glob' +import { FS_PREFIX } from '../constants' import { getHash } from '../utils' import { transformRequest } from '../server/transformRequest' import type { ResolvedConfig, ViteDevServer } from '..' @@ -585,17 +587,21 @@ export async function preTransformOptimizeDepsEntries( server: ViteDevServer ): Promise { const { config } = server + const { root } = config const { entries } = config.optimizeDeps if (entries) { const explicitEntries = await glob(entries, { - cwd: config.root, + cwd: root, ignore: ['**/node_modules/**', `**/${config.build.outDir}/**`], absolute: true }) // TODO: should we restrict the entries to JS and HTML like the // scanner did? I think we can let the user chose any entry for (const entry of explicitEntries) { - transformRequest(entry, server, { ssr: false }).catch((e) => { + const url = entry.startsWith(root + '/') + ? entry.slice(root.length) + : path.posix.join(FS_PREFIX + entry) + transformRequest(url, server, { ssr: false }).catch((e) => { config.logger.error(e.message) }) }