Skip to content

Commit 572563e

Browse files
authored
feat: use native plugin for create id resolver (#68)
1 parent bc0cc67 commit 572563e

File tree

6 files changed

+65
-33
lines changed

6 files changed

+65
-33
lines changed

packages/vite/src/node/idResolver.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import aliasPlugin from '@rollup/plugin-alias'
33
import type { ResolvedConfig } from './config'
44
import type { EnvironmentPluginContainer } from './server/pluginContainer'
55
import { createEnvironmentPluginContainer } from './server/pluginContainer'
6-
import { resolvePlugin } from './plugins/resolve'
6+
import { oxcResolvePlugin, resolvePlugin } from './plugins/resolve'
77
import type { InternalResolveOptions } from './plugins/resolve'
88
import type { Environment } from './environment'
99
import type { PartialEnvironment } from './baseEnvironment'
10+
import type { Plugin } from './plugin'
1011

1112
export type ResolveIdFn = (
1213
environment: PartialEnvironment,
@@ -61,18 +62,34 @@ export function createIdResolver(
6162
[
6263
// @ts-expect-error the aliasPlugin uses rollup types
6364
aliasPlugin({ entries: environment.config.resolve.alias }),
64-
// TODO: use oxcResolvePlugin here as well
65-
resolvePlugin({
66-
root: config.root,
67-
isProduction: config.isProduction,
68-
isBuild: config.command === 'build',
69-
asSrc: true,
70-
preferRelative: false,
71-
tryIndex: true,
72-
...options,
73-
// Ignore sideEffects and other computations as we only need the id
74-
idOnly: true,
75-
}),
65+
...(config.experimental.enableNativePlugin
66+
? (oxcResolvePlugin(
67+
{
68+
root: config.root,
69+
isProduction: config.isProduction,
70+
isBuild: config.command === 'build',
71+
asSrc: true,
72+
preferRelative: false,
73+
tryIndex: true,
74+
...options,
75+
// Ignore sideEffects and other computations as we only need the id
76+
idOnly: true,
77+
},
78+
environment.config,
79+
) as Plugin[])
80+
: [
81+
resolvePlugin({
82+
root: config.root,
83+
isProduction: config.isProduction,
84+
isBuild: config.command === 'build',
85+
asSrc: true,
86+
preferRelative: false,
87+
tryIndex: true,
88+
...options,
89+
// Ignore sideEffects and other computations as we only need the id
90+
idOnly: true,
91+
}),
92+
]),
7693
],
7794
)
7895
pluginContainerMap.set(environment, pluginContainer)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,6 +1182,7 @@ function createCSSResolvers(config: ResolvedConfig): CSSAtImportResolvers {
11821182
tryIndex: true,
11831183
tryPrefix: '_',
11841184
preferRelative: true,
1185+
skipMainField: true,
11851186
})
11861187
sassResolve = async (...args) => {
11871188
if (args[1].startsWith('file://')) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export async function resolvePlugins(
107107
optimizeDeps: true,
108108
externalize: true,
109109
},
110-
isWorker ? config : undefined,
110+
isWorker ? { ...config, consumer: 'client' } : undefined,
111111
)
112112
: [
113113
resolvePlugin({

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

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ interface ResolvePluginOptions {
129129
isFromTsImporter?: boolean
130130
// True when resolving during the scan phase to discover dependencies
131131
scan?: boolean
132+
/**
133+
* @internal
134+
*/
135+
skipMainField?: boolean
132136

133137
/**
134138
* Optimize deps during dev, defaults to false // TODO: Review default
@@ -182,31 +186,31 @@ export interface ResolvePluginOptionsWithOverrides
182186

183187
const perEnvironmentOrWorkerPlugin = (
184188
name: string,
185-
configIfWorker: ResolvedConfig | undefined,
189+
overrideEnvConfig: (ResolvedConfig & ResolvedEnvironmentOptions) | undefined,
186190
f: (env: {
187191
name: string
188192
config: ResolvedConfig & ResolvedEnvironmentOptions
189193
}) => Plugin,
190194
): Plugin => {
191-
if (configIfWorker) {
195+
if (overrideEnvConfig) {
192196
return f({
193197
name: 'client',
194-
config: { ...configIfWorker, consumer: 'client' },
198+
config: overrideEnvConfig,
195199
})
196200
}
197201
return perEnvironmentPlugin(name, f)
198202
}
199203

200204
export function oxcResolvePlugin(
201205
resolveOptions: ResolvePluginOptionsWithOverrides,
202-
configIfWorker: ResolvedConfig | undefined,
206+
overrideEnvConfig: (ResolvedConfig & ResolvedEnvironmentOptions) | undefined,
203207
): (RolldownPlugin | Plugin)[] {
204208
return [
205209
optimizerResolvePlugin(resolveOptions),
206210
importGlobSubpathImportsResolvePlugin(resolveOptions),
207211
perEnvironmentOrWorkerPlugin(
208212
'vite:resolve-builtin',
209-
configIfWorker,
213+
overrideEnvConfig,
210214
(env) => {
211215
const environment = env as Environment
212216
// The resolve plugin is used for createIdResolver and the depsOptimizer should be
@@ -242,7 +246,9 @@ export function oxcResolvePlugin(
242246
root: options.root,
243247
scan: options.scan ?? false,
244248

245-
mainFields: options.mainFields.concat(['main']),
249+
mainFields: options.skipMainField
250+
? options.mainFields
251+
: options.mainFields.concat(['main']),
246252
conditions: options.conditions,
247253
externalConditions: options.externalConditions,
248254
extensions: options.extensions,
@@ -302,9 +308,17 @@ export function oxcResolvePlugin(
302308
}
303309
return newId
304310
},
305-
finalizeOtherSpecifiers(resolvedId, rawId) {
306-
return ensureVersionQuery(resolvedId, rawId, options, depsOptimizer)
307-
},
311+
finalizeOtherSpecifiers: !depsOptimizer
312+
? undefined
313+
: (resolvedId, rawId) => {
314+
const newResolvedId = ensureVersionQuery(
315+
resolvedId,
316+
rawId,
317+
options,
318+
depsOptimizer,
319+
)
320+
return newResolvedId === resolvedId ? undefined : newResolvedId
321+
},
308322
}) as unknown as Plugin
309323
},
310324
),

packages/vite/src/node/server/environment.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import type { FetchFunctionOptions, FetchResult } from 'vite/module-runner'
22
import type { FSWatcher } from 'dep-types/chokidar'
33
import colors from 'picocolors'
4-
import {
5-
isCallableCompatibleBuiltinPlugin,
6-
makeBuiltinPluginCallable,
7-
} from 'rolldown/experimental'
84
import {
95
BaseEnvironment,
106
getDefaultResolvedEnvironmentOptions,
@@ -171,11 +167,7 @@ export class DevEnvironment extends BaseEnvironment {
171167
return
172168
}
173169
this._initiated = true
174-
this._plugins = (await resolveEnvironmentPlugins(this)).map((plugin) =>
175-
isCallableCompatibleBuiltinPlugin(plugin)
176-
? makeBuiltinPluginCallable(plugin)
177-
: plugin,
178-
)
170+
this._plugins = await resolveEnvironmentPlugins(this)
179171
this._pluginContainer = await createEnvironmentPluginContainer(
180172
this,
181173
this._plugins,

packages/vite/src/node/server/pluginContainer.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ import { TraceMap, originalPositionFor } from '@jridgewell/trace-mapping'
6262
import MagicString from 'magic-string'
6363
import type { FSWatcher } from 'dep-types/chokidar'
6464
import colors from 'picocolors'
65+
import {
66+
isCallableCompatibleBuiltinPlugin,
67+
makeBuiltinPluginCallable,
68+
} from 'rolldown/experimental'
6569
import type { Plugin } from '../plugin'
6670
import {
6771
combineSourcemaps,
@@ -138,7 +142,11 @@ export async function createEnvironmentPluginContainer(
138142
): Promise<EnvironmentPluginContainer> {
139143
const container = new EnvironmentPluginContainer(
140144
environment,
141-
plugins,
145+
plugins.map((plugin) =>
146+
isCallableCompatibleBuiltinPlugin(plugin)
147+
? makeBuiltinPluginCallable(plugin)
148+
: plugin,
149+
),
142150
watcher,
143151
)
144152
await container.resolveRollupOptions()

0 commit comments

Comments
 (0)