Skip to content

Commit a4d8319

Browse files
authored
refactor: move the condition related to enableNativePlugin to the plugin file side (#239)
1 parent 031c41a commit a4d8319

File tree

12 files changed

+153
-138
lines changed

12 files changed

+153
-138
lines changed

packages/vite/src/node/__tests__/plugins/json.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ describe('transform', () => {
3535
opts: Required<JsonOptions>,
3636
isBuild: boolean,
3737
) => {
38-
const plugin = jsonPlugin(opts, isBuild)
38+
const plugin = jsonPlugin(opts, isBuild, false)
3939
// @ts-expect-error transform.handler should exist
4040
return plugin.transform.handler(input, 'test.json', { moduleType: 'json' })
4141
.code

packages/vite/src/node/build.ts

Lines changed: 6 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,7 @@ import type {
2323
WarningHandlerWithDefault,
2424
WatcherOptions,
2525
} from 'rolldown'
26-
import {
27-
loadFallbackPlugin as nativeLoadFallbackPlugin,
28-
manifestPlugin as nativeManifestPlugin,
29-
reporterPlugin as nativeReporterPlugin,
30-
webWorkerPostPlugin as nativeWebWorkerPostPlugin,
31-
} from 'rolldown/experimental'
26+
import { loadFallbackPlugin as nativeLoadFallbackPlugin } from 'rolldown/experimental'
3227
import type { RollupCommonJSOptions } from 'dep-types/commonjs'
3328
import type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars'
3429
import type { EsbuildTarget } from 'types/internal/esbuildOptions'
@@ -67,7 +62,7 @@ import {
6762
} from './utils'
6863
import { perEnvironmentPlugin, resolveEnvironmentPlugins } from './plugin'
6964
import { manifestPlugin } from './plugins/manifest'
70-
import { LogLevels, type Logger } from './logger'
65+
import { type Logger } from './logger'
7166
import { buildImportAnalysisPlugin } from './plugins/importAnalysisBuild'
7267
import { ssrManifestPlugin } from './ssr/ssrManifestPlugin'
7368
import { findNearestMainPackageData, findNearestPackageData } from './packages'
@@ -481,7 +476,6 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
481476
pre: Plugin[]
482477
post: Plugin[]
483478
}> {
484-
const enableNativePlugin = config.experimental.enableNativePlugin
485479
return {
486480
pre: [
487481
completeSystemWrapPlugin(),
@@ -494,24 +488,11 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
494488
)
495489
).filter(Boolean) as Plugin[],
496490
),
497-
...(config.isWorker
498-
? [
499-
enableNativePlugin === true
500-
? perEnvironmentPlugin(
501-
'native:web-worker-post-plugin',
502-
(environment) => {
503-
if (environment.config.worker.format === 'iife') {
504-
return nativeWebWorkerPostPlugin()
505-
}
506-
},
507-
)
508-
: webWorkerPostPlugin(),
509-
]
510-
: []),
491+
...(config.isWorker ? [webWorkerPostPlugin(config)] : []),
511492
],
512493
post: [
513494
...buildImportAnalysisPlugin(config),
514-
...(enableNativePlugin !== true
495+
...(config.experimental.enableNativePlugin !== true
515496
? [
516497
buildOxcPlugin(),
517498
...(config.build.minify === 'esbuild'
@@ -522,36 +503,9 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
522503
terserPlugin(config),
523504
...(!config.isWorker
524505
? [
525-
config.build.manifest && enableNativePlugin === true
526-
? perEnvironmentPlugin('native:manifest', (environment) => {
527-
if (!environment.config.build.manifest) return false
528-
529-
return nativeManifestPlugin({
530-
root: environment.config.root,
531-
outPath:
532-
environment.config.build.manifest === true
533-
? '.vite/manifest.json'
534-
: environment.config.build.manifest,
535-
})
536-
})
537-
: manifestPlugin(),
506+
manifestPlugin(config),
538507
ssrManifestPlugin(),
539-
enableNativePlugin === true
540-
? perEnvironmentPlugin('native:reporter', (env) => {
541-
const tty = process.stdout.isTTY && !process.env.CI
542-
const shouldLogInfo =
543-
LogLevels[config.logLevel || 'info'] >= LogLevels.info
544-
const assetsDir = path.join(env.config.build.assetsDir, '/')
545-
return nativeReporterPlugin({
546-
isTty: !!tty,
547-
isLib: !!env.config.build.lib,
548-
assetsDir,
549-
chunkLimit: env.config.build.chunkSizeWarningLimit,
550-
shouldLogInfo,
551-
reportCompressedSize: env.config.build.reportCompressedSize,
552-
})
553-
})
554-
: buildReporterPlugin(config),
508+
buildReporterPlugin(config),
555509
]
556510
: []),
557511
nativeLoadFallbackPlugin(),

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { init, parse as parseImports } from 'es-module-lexer'
44
import type { ImportSpecifier } from 'es-module-lexer'
55
import { parseAst } from 'rolldown/parseAst'
66
import { dynamicImportToGlob } from '@rollup/plugin-dynamic-import-vars'
7+
import { dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin } from 'rolldown/experimental'
78
import { exactRegex } from '@rolldown/pluginutils'
89
import type { Plugin } from '../plugin'
910
import type { ResolvedConfig } from '../config'
@@ -166,6 +167,10 @@ export async function transformDynamicImport(
166167
}
167168

168169
export function dynamicImportVarsPlugin(config: ResolvedConfig): Plugin {
170+
if (config.experimental.enableNativePlugin === true) {
171+
return nativeDynamicImportVarsPlugin()
172+
}
173+
169174
const resolve = createBackCompatIdResolver(config, {
170175
preferRelative: true,
171176
tryIndex: false,

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { stringifyQuery } from 'ufo'
1616
import type { GeneralImportGlobOptions } from 'types/importGlob'
1717
import { parseAstAsync } from 'rolldown/parseAst'
1818
import { escapePath, glob } from 'tinyglobby'
19+
import { importGlobPlugin as nativeImportGlobPlugin } from 'rolldown/experimental'
1920
import type { Plugin } from '../plugin'
2021
import type { EnvironmentModuleNode } from '../server/moduleGraph'
2122
import type { ResolvedConfig } from '../config'
@@ -41,6 +42,13 @@ interface ParsedGeneralImportGlobOptions extends GeneralImportGlobOptions {
4142
}
4243

4344
export function importGlobPlugin(config: ResolvedConfig): Plugin {
45+
if (config.experimental.enableNativePlugin === true) {
46+
return nativeImportGlobPlugin({
47+
root: config.root,
48+
restoreQueryExtension: config.experimental.importGlobRestoreExtension,
49+
})
50+
}
51+
4452
const importGlobMaps = new Map<
4553
Environment,
4654
Map<string, Array<(file: string) => boolean>>

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

Lines changed: 9 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
1-
import url from 'node:url'
21
import aliasPlugin, { type ResolverFunction } from '@rollup/plugin-alias'
32
import type { ObjectHook } from 'rolldown'
4-
import type { TransformOptions as OxcTransformOptions } from 'rolldown/experimental'
5-
import {
6-
aliasPlugin as nativeAliasPlugin,
7-
dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin,
8-
importGlobPlugin as nativeImportGlobPlugin,
9-
jsonPlugin as nativeJsonPlugin,
10-
modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin,
11-
transformPlugin as nativeTransformPlugin,
12-
wasmFallbackPlugin as nativeWasmFallbackPlugin,
13-
wasmHelperPlugin as nativeWasmHelperPlugin,
14-
} from 'rolldown/experimental'
3+
import { aliasPlugin as nativeAliasPlugin } from 'rolldown/experimental'
154
import type { PluginHookUtils, ResolvedConfig } from '../config'
165
import {
176
type HookHandler,
187
type Plugin,
198
type PluginWithRequiredHook,
20-
perEnvironmentPlugin,
219
} from '../plugin'
2210
import { watchPackageDataPlugin } from '../packages'
23-
import { normalizePath } from '../utils'
2411
import { jsonPlugin } from './json'
2512
import { oxcResolvePlugin, resolvePlugin } from './resolve'
2613
import { optimizedDepsPlugin } from './optimizedDeps'
@@ -44,7 +31,7 @@ import {
4431
createFilterForTransform,
4532
createIdFilter,
4633
} from './pluginFilter'
47-
import { type OxcOptions, oxcPlugin } from './oxc'
34+
import { oxcPlugin } from './oxc'
4835
import { esbuildBannerFooterCompatPlugin } from './esbuildBannerFooterCompatPlugin'
4936

5037
export async function resolvePlugins(
@@ -83,19 +70,7 @@ export async function resolvePlugins(
8370
...prePlugins,
8471

8572
modulePreload !== false && modulePreload.polyfill
86-
? enableNativePlugin === true
87-
? perEnvironmentPlugin(
88-
'native:modulepreload-polyfill',
89-
(environment) => {
90-
if (
91-
config.command !== 'build' ||
92-
environment.config.consumer !== 'client'
93-
)
94-
return false
95-
return nativeModulePreloadPolyfillPlugin()
96-
},
97-
)
98-
: modulePreloadPolyfillPlugin(config)
73+
? modulePreloadPolyfillPlugin(config)
9974
: null,
10075
...(enableNativePlugin
10176
? oxcResolvePlugin(
@@ -126,65 +101,23 @@ export async function resolvePlugins(
126101
htmlInlineProxyPlugin(config),
127102
cssPlugin(config),
128103
esbuildBannerFooterCompatPlugin(config),
129-
config.oxc !== false
130-
? enableNativePlugin === true
131-
? perEnvironmentPlugin('native:transform', (environment) => {
132-
const {
133-
jsxInject,
134-
include = /\.(m?ts|[jt]sx)$/,
135-
exclude = /\.js$/,
136-
jsxRefreshInclude,
137-
jsxRefreshExclude,
138-
..._transformOptions
139-
} = config.oxc as Exclude<OxcOptions, false | undefined>
140-
141-
const transformOptions: OxcTransformOptions = _transformOptions
142-
transformOptions.sourcemap =
143-
environment.config.mode !== 'build' ||
144-
!!environment.config.build.sourcemap
145-
146-
return nativeTransformPlugin({
147-
include,
148-
exclude,
149-
jsxRefreshInclude,
150-
jsxRefreshExclude,
151-
isServerConsumer: environment.config.consumer === 'server',
152-
runtimeResolveBase: normalizePath(
153-
url.fileURLToPath(import.meta.url),
154-
),
155-
jsxInject,
156-
transformOptions,
157-
})
158-
})
159-
: oxcPlugin(config)
160-
: null,
161-
enableNativePlugin === true
162-
? nativeJsonPlugin({ ...config.json, minify: isBuild })
163-
: jsonPlugin(config.json, isBuild),
164-
enableNativePlugin === true ? nativeWasmHelperPlugin() : wasmHelperPlugin(),
104+
config.oxc !== false ? oxcPlugin(config) : null,
105+
jsonPlugin(config.json, isBuild, enableNativePlugin === true),
106+
wasmHelperPlugin(config),
165107
webWorkerPlugin(config),
166108
assetPlugin(config),
167109

168110
...normalPlugins,
169111

170-
enableNativePlugin === true
171-
? nativeWasmFallbackPlugin()
172-
: wasmFallbackPlugin(),
112+
wasmFallbackPlugin(config),
173113
definePlugin(config),
174114
cssPostPlugin(config),
175115
isBuild && buildHtmlPlugin(config),
176116
workerImportMetaUrlPlugin(config),
177117
assetImportMetaUrlPlugin(config),
178118
...buildPlugins.pre,
179-
enableNativePlugin === true
180-
? nativeDynamicImportVarsPlugin()
181-
: dynamicImportVarsPlugin(config),
182-
enableNativePlugin === true
183-
? nativeImportGlobPlugin({
184-
root: config.root,
185-
restoreQueryExtension: config.experimental.importGlobRestoreExtension,
186-
})
187-
: importGlobPlugin(config),
119+
dynamicImportVarsPlugin(config),
120+
importGlobPlugin(config),
188121

189122
...postPlugins,
190123

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88

99
import { dataToEsm, makeLegalIdentifier } from '@rollup/pluginutils'
10+
import { jsonPlugin as nativeJsonPlugin } from 'rolldown/experimental'
1011
import { SPECIAL_QUERY_RE } from '../constants'
1112
import type { Plugin } from '../plugin'
1213
import { stripBomTag } from '../utils'
@@ -40,7 +41,12 @@ export const isJSONRequest = (request: string): boolean =>
4041
export function jsonPlugin(
4142
options: Required<JsonOptions>,
4243
isBuild: boolean,
44+
enableNativePlugin: boolean,
4345
): Plugin {
46+
if (enableNativePlugin) {
47+
return nativeJsonPlugin({ ...options, minify: isBuild })
48+
}
49+
4450
const plugin = {
4551
name: 'vite:json',
4652

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import type {
55
OutputChunk,
66
RenderedChunk,
77
} from 'rolldown'
8+
import { manifestPlugin as nativeManifestPlugin } from 'rolldown/experimental'
89
import type { Plugin } from '../plugin'
910
import { normalizePath, sortObjectKeys } from '../utils'
1011
import { perEnvironmentState } from '../environment'
12+
import { type ResolvedConfig, perEnvironmentPlugin } from '..'
1113
import { cssEntriesMap } from './asset'
1214

1315
const endsWithJSRE = /\.[cm]?js$/
@@ -26,7 +28,24 @@ export interface ManifestChunk {
2628
dynamicImports?: string[]
2729
}
2830

29-
export function manifestPlugin(): Plugin {
31+
export function manifestPlugin(config: ResolvedConfig): Plugin {
32+
if (
33+
config.build.manifest &&
34+
config.experimental.enableNativePlugin === true
35+
) {
36+
return perEnvironmentPlugin('native:manifest', (environment) => {
37+
if (!environment.config.build.manifest) return false
38+
39+
return nativeManifestPlugin({
40+
root: environment.config.root,
41+
outPath:
42+
environment.config.build.manifest === true
43+
? '.vite/manifest.json'
44+
: environment.config.build.manifest,
45+
})
46+
})
47+
}
48+
3049
const getState = perEnvironmentState(() => {
3150
return {
3251
manifest: {} as Manifest,

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
import { exactRegex } from '@rolldown/pluginutils'
2-
import type { ResolvedConfig } from '..'
2+
import { modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin } from 'rolldown/experimental'
3+
import { type ResolvedConfig, perEnvironmentPlugin } from '..'
34
import type { Plugin } from '../plugin'
45
import { isModernFlag } from './importAnalysisBuild'
56

67
export const modulePreloadPolyfillId = 'vite/modulepreload-polyfill'
78
const resolvedModulePreloadPolyfillId = '\0' + modulePreloadPolyfillId + '.js'
89

910
export function modulePreloadPolyfillPlugin(config: ResolvedConfig): Plugin {
11+
if (config.experimental.enableNativePlugin === true) {
12+
return perEnvironmentPlugin(
13+
'native:modulepreload-polyfill',
14+
(environment) => {
15+
if (
16+
config.command !== 'build' ||
17+
environment.config.consumer !== 'client'
18+
)
19+
return false
20+
return nativeModulePreloadPolyfillPlugin()
21+
},
22+
)
23+
}
24+
1025
let polyfillString: string | undefined
1126

1227
return {

0 commit comments

Comments
 (0)