diff --git a/packages/vite/src/node/plugins/asset.ts b/packages/vite/src/node/plugins/asset.ts index 651bd7b3b8b9c0..fe86d4a0ab10a7 100644 --- a/packages/vite/src/node/plugins/asset.ts +++ b/packages/vite/src/node/plugins/asset.ts @@ -29,7 +29,7 @@ import { FS_PREFIX } from '../constants' export const assetUrlRE = /__VITE_ASSET__([a-z\d]+)__(?:\$_(.*?)__)?/g const rawRE = /(?:\?|&)raw(?:&|$)/ -const urlRE = /(\?|&)url(?:&|$)/ +export const urlRE = /(\?|&)url(?:&|$)/ const jsSourceMapRE = /\.[cm]?js\.map$/ const unnededFinalQueryCharRE = /[?&]$/ @@ -147,7 +147,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin { }, resolveId(id) { - if (!config.assetsInclude(cleanUrl(id))) { + if (!config.assetsInclude(cleanUrl(id)) && !urlRE.test(id)) { return } // imports to absolute urls pointing to files in /public diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index 24422159bbbb84..d75a3cb769df22 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -55,7 +55,7 @@ import { } from '../ssr/ssrExternal' import { getDepsOptimizer, optimizedDepNeedsInterop } from '../optimizer' import { ERR_CLOSED_SERVER } from '../server/pluginContainer' -import { checkPublicFile } from './asset' +import { checkPublicFile, urlRE } from './asset' import { ERR_OUTDATED_OPTIMIZED_DEP, throwOutdatedRequest, @@ -507,14 +507,20 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { // warn imports to non-asset /public files if ( specifier[0] === '/' && - !config.assetsInclude(cleanUrl(specifier)) && - !specifier.endsWith('.json') && + !( + config.assetsInclude(cleanUrl(specifier)) || + urlRE.test(specifier) + ) && checkPublicFile(specifier, config) ) { throw new Error( - `Cannot import non-asset file ${specifier} which is inside /public.` + + `Cannot import non-asset file ${specifier} which is inside /public. ` + `JS/CSS files inside /public are copied as-is on build and ` + - `can only be referenced via