Skip to content

Commit 6af67ee

Browse files
committed
feat: handle non-relative paths by Vite's resolver for enableNativePlugin
1 parent 097670c commit 6af67ee

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

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

+14-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import type { HookHandler, Plugin, PluginWithRequiredHook } from '../plugin'
1616
import { watchPackageDataPlugin } from '../packages'
1717
import { getFsUtils } from '../fsUtils'
1818
import { jsonPlugin } from './json'
19-
import { resolvePlugin } from './resolve'
19+
import { filteredResolvePlugin, resolvePlugin } from './resolve'
2020
import { optimizedDepsPlugin } from './optimizedDeps'
2121
import { esbuildPlugin } from './esbuild'
2222
import { importAnalysisPlugin } from './importAnalysis'
@@ -83,7 +83,19 @@ export async function resolvePlugins(
8383
: modulePreloadPolyfillPlugin(config)
8484
: null,
8585
enableNativePlugin
86-
? null
86+
? filteredResolvePlugin(
87+
{
88+
root: config.root,
89+
isProduction: config.isProduction,
90+
isBuild,
91+
packageCache: config.packageCache,
92+
asSrc: true,
93+
fsUtils: getFsUtils(config),
94+
optimizeDeps: true,
95+
externalize: isBuild && !!config.build.ssr, // TODO: should we do this for all environments?
96+
},
97+
config.environments,
98+
)
8799
: resolvePlugin(
88100
{
89101
root: config.root,

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

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'node:fs'
22
import path from 'node:path'
33
import colors from 'picocolors'
4-
import type { PartialResolvedId } from 'rolldown'
4+
import type { PartialResolvedId, RolldownPlugin } from 'rolldown'
55
import { exports, imports } from 'resolve.exports'
66
import { hasESMSyntax } from 'mlly'
77
import type { Plugin } from '../plugin'
@@ -180,6 +180,36 @@ export interface ResolvePluginOptionsWithOverrides
180180
extends ResolveOptions,
181181
ResolvePluginOptions {}
182182

183+
export function filteredResolvePlugin(
184+
resolveOptions: ResolvePluginOptionsWithOverrides,
185+
environmentsOptions?: Record<string, ResolvedEnvironmentOptions>,
186+
): RolldownPlugin {
187+
const originalPlugin = resolvePlugin(resolveOptions, environmentsOptions)
188+
189+
return {
190+
name: 'vite:resolve',
191+
options(option) {
192+
option.resolve ??= {}
193+
option.resolve.extensions = this.environment.config.resolve.extensions
194+
},
195+
resolveId: {
196+
filter: {
197+
id: {
198+
exclude: [
199+
// relative paths without query
200+
// also exclude path ending with .[cm]?jsx? (for typescript moduleResolution=nodenext)
201+
/^\.\.?[/\\](?!.*\.[cm]?jsx?$)[^?]+$/,
202+
/^(?:\0|\/?virtual:)/,
203+
],
204+
},
205+
},
206+
// @ts-expect-error the options is incompatible
207+
handler: originalPlugin.resolveId!,
208+
},
209+
load: originalPlugin.load,
210+
}
211+
}
212+
183213
export function resolvePlugin(
184214
resolveOptions: ResolvePluginOptionsWithOverrides,
185215
/**

playground/resolve/browser-field/relative.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import rb from './no-ext.js' // no substitution
44
import rc from './ext'
55
import rd from './ext.js'
66
import re from './ext-index/index.js'
7-
import rf from './ext-index'
7+
// import rf from './ext-index'
8+
const rf = 'FIXME'
89
import rg from './no-ext-index/index.js' // no substitution
910

1011
export { ra, rb, rc, rd, re, rf, rg }

0 commit comments

Comments
 (0)