Skip to content

Commit 6a564fa

Browse files
authored
feat: error when failed to resolve aliased import (#14973)
1 parent dc58222 commit 6a564fa

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

packages/vite/src/node/plugins/importAnalysis.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin {
305305

306306
const resolved = await this.resolve(url, importerFile)
307307

308-
if (!resolved) {
308+
if (!resolved || resolved.meta?.['vite:alias']?.noResolved) {
309309
// in ssr, we should let node handle the missing modules
310310
if (ssr) {
311311
return [url, url]

packages/vite/src/node/plugins/index.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import aliasPlugin from '@rollup/plugin-alias'
1+
import aliasPlugin, { type ResolverFunction } from '@rollup/plugin-alias'
22
import type { ObjectHook } from 'rollup'
33
import type { PluginHookUtils, ResolvedConfig } from '../config'
44
import { isDepsOptimizerEnabled } from '../config'
@@ -51,7 +51,10 @@ export async function resolvePlugins(
5151
isBuild ? metadataPlugin() : null,
5252
!isWorker ? watchPackageDataPlugin(config.packageCache) : null,
5353
preAliasPlugin(config),
54-
aliasPlugin({ entries: config.resolve.alias }),
54+
aliasPlugin({
55+
entries: config.resolve.alias,
56+
customResolver: viteAliasCustomResolver,
57+
}),
5558
...prePlugins,
5659
modulePreload !== false && modulePreload.polyfill
5760
? modulePreloadPolyfillPlugin(config)
@@ -161,3 +164,14 @@ export function getHookHandler<T extends ObjectHook<Function>>(
161164
): HookHandler<T> {
162165
return (typeof hook === 'object' ? hook.handler : hook) as HookHandler<T>
163166
}
167+
168+
// Same as `@rollup/plugin-alias` default resolver, but we attach additional meta
169+
// if we can't resolve to something, which will error in `importAnalysis`
170+
export const viteAliasCustomResolver: ResolverFunction = async function (
171+
id,
172+
importer,
173+
options,
174+
) {
175+
const resolved = await this.resolve(id, importer, options)
176+
return resolved || { id, meta: { 'vite:alias': { noResolved: true } } }
177+
}

0 commit comments

Comments
 (0)