diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index b232a1ba0809fc..18cbc208b0e74e 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -72,7 +72,7 @@ import { mergeConfig } from './publicUtils' import { webWorkerPostPlugin } from './plugins/worker' import { getHookHandler } from './plugins' import { BaseEnvironment } from './baseEnvironment' -import type { Plugin, PluginContext } from './plugin' +import type { MinimalPluginContext, Plugin, PluginContext } from './plugin' import type { RollupPluginHooks } from './typeUtils' export interface BuildEnvironmentOptions { @@ -1268,7 +1268,7 @@ function wrapEnvironmentHook( } } -function injectEnvironmentInContext( +function injectEnvironmentInContext( context: Context, environment: BuildEnvironment, ) { diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts index cf3a61ede011fd..524ee9cdcb0355 100644 --- a/packages/vite/src/node/constants.ts +++ b/packages/vite/src/node/constants.ts @@ -8,6 +8,7 @@ const { version } = JSON.parse( ) export const ROLLUP_HOOKS = [ + 'options', 'buildStart', 'buildEnd', 'renderStart', @@ -19,7 +20,7 @@ export const ROLLUP_HOOKS = [ 'footer', 'augmentChunkHash', // 'outputOptions', - // 'renderDynamicImport', + 'resolveDynamicImport', // 'resolveFileUrl', // 'resolveImportMeta', 'intro', @@ -33,6 +34,7 @@ export const ROLLUP_HOOKS = [ 'resolveId', // 'shouldTransformCachedModule', 'transform', + 'onLog', ] satisfies RollupPluginHooks[] export const VERSION = version as string diff --git a/packages/vite/src/node/plugin.ts b/packages/vite/src/node/plugin.ts index ef1f4d294d25fb..f32e0946166054 100644 --- a/packages/vite/src/node/plugin.ts +++ b/packages/vite/src/node/plugin.ts @@ -4,6 +4,7 @@ import type { ModuleType, ObjectHook, ResolveIdResult, + MinimalPluginContext as RollupMinimalPluginContext, Plugin as RollupPlugin, PluginContext as RollupPluginContext, TransformPluginContext as RollupTransformPluginContext, @@ -68,6 +69,10 @@ export interface TransformPluginContextExtension { getCombinedSourcemap: () => SourceMap } +export interface MinimalPluginContext + extends RollupMinimalPluginContext, + PluginContextExtension {} + export interface PluginContext extends RollupPluginContext, PluginContextExtension {} diff --git a/packages/vite/src/node/plugins/define.ts b/packages/vite/src/node/plugins/define.ts index 39d7b6bf8f3f5e..6232728f0db840 100644 --- a/packages/vite/src/node/plugins/define.ts +++ b/packages/vite/src/node/plugins/define.ts @@ -1,7 +1,7 @@ import { transform } from 'esbuild' import { TraceMap, decodedMap, encodedMap } from '@jridgewell/trace-mapping' +import type { RolldownPlugin } from 'rolldown' import type { ResolvedConfig } from '../config' -import type { Plugin } from '../plugin' import { escapeRegex } from '../utils' import type { Environment } from '../environment' import { isCSSRequest } from './css' @@ -12,7 +12,7 @@ const isNonJsRequest = (request: string): boolean => nonJsRe.test(request) const importMetaEnvMarker = '__vite_import_meta_env__' const importMetaEnvKeyReCache = new Map() -export function definePlugin(config: ResolvedConfig): Plugin { +export function definePlugin(config: ResolvedConfig): RolldownPlugin { const isBuild = config.command === 'build' const isBuildLib = isBuild && config.build.lib @@ -111,7 +111,7 @@ export function definePlugin(config: ResolvedConfig): Plugin { return pattern } - return { + const plugin: RolldownPlugin = { name: 'vite:define', async transform(code, id) { @@ -179,6 +179,16 @@ export function definePlugin(config: ResolvedConfig): Plugin { return result }, } + const enableNativePlugin = config.experimental.enableNativePlugin + if (enableNativePlugin) { + delete plugin.transform + plugin.options = function (option) { + // @ts-expect-error TODO: fix type + const [define, _pattern, _importMetaEnvVal] = getPattern(this.environment) + option.define = define + } + } + return plugin } export async function replaceDefine( diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index acd7e79533c99c..351827adc6c714 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -121,7 +121,6 @@ export async function resolvePlugins( ...normalPlugins, enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), - // TODO: support nativedefinePlugin definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), diff --git a/packages/vite/src/node/typeUtils.ts b/packages/vite/src/node/typeUtils.ts index e06e5e4b8ee4b7..cf09e9e7ab1454 100644 --- a/packages/vite/src/node/typeUtils.ts +++ b/packages/vite/src/node/typeUtils.ts @@ -1,7 +1,7 @@ import type { ObjectHook, + MinimalPluginContext as RollupMinimalPluginContext, Plugin as RollupPlugin, - PluginContext as RollupPluginContext, } from 'rolldown' export type NonNeverKeys = { @@ -11,7 +11,7 @@ export type NonNeverKeys = { export type GetHookContextMap = { [K in keyof Plugin]-?: Plugin[K] extends ObjectHook ? T extends (this: infer This, ...args: any[]) => any - ? This extends RollupPluginContext + ? This extends RollupMinimalPluginContext ? This : never : never diff --git a/playground/define/vite.config.js b/playground/define/vite.config.js index d6c4d22709266b..9fff76b94cb6cd 100644 --- a/playground/define/vite.config.js +++ b/playground/define/vite.config.js @@ -31,4 +31,7 @@ export default defineConfig({ __STRINGIFIED_OBJ__: JSON.stringify({ foo: true }), 'import.meta.env.SOME_IDENTIFIER': '__VITE_SOME_IDENTIFIER__', }, + experimental: { + enableNativePlugin: true, + }, })