Skip to content

Commit 54539f5

Browse files
IWANABETHATGUYsapphi-red
authored andcommitted
feat: add experimental.enableNativePlugin (#41)
2cf0eb2 fe71cbc Co-authored-by: IWANABETHATGUY <[email protected]>
1 parent bdb1cca commit 54539f5

File tree

3 files changed

+78
-17
lines changed

3 files changed

+78
-17
lines changed

justfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
11
build-vite:
22
pnpm --filter vite run build-bundle
3+
4+
test-serve:
5+
pnpm run test-serve
6+
7+
test-build:
8+
pnpm run test-build
9+
10+
test: test-serve test-build
11+
12+
fmt:
13+
pnpm --filter vite run format

packages/vite/src/node/config.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,14 @@ export interface ExperimentalOptions {
494494
* @default false
495495
*/
496496
skipSsrTransform?: boolean
497+
498+
/**
499+
* Enable builtin plugin that written by rust, which is faster than js plugin.
500+
*
501+
* @experimental
502+
* @default true
503+
*/
504+
enableNativePlugin?: boolean
497505
}
498506

499507
export interface LegacyOptions {
@@ -1243,6 +1251,7 @@ export async function resolveConfig(
12431251
experimental: {
12441252
importGlobRestoreExtension: false,
12451253
hmrPartialAccept: false,
1254+
enableNativePlugin: false,
12461255
...config.experimental,
12471256
},
12481257
future: config.future,

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

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
import aliasPlugin, { type ResolverFunction } from '@rollup/plugin-alias'
22
import type { ObjectHook } from 'rolldown'
3+
import {
4+
aliasPlugin as nativeAliasPlugin,
5+
dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin,
6+
importGlobPlugin as nativeImportGlobPlugin,
7+
jsonPlugin as nativeJsonPlugin,
8+
modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin,
9+
transformPlugin as nativeTransformPlugin,
10+
wasmFallbackPlugin as nativeWasmFallbackPlugin,
11+
wasmHelperPlugin as nativeWasmHelperPlugin,
12+
} from 'rolldown/experimental'
313
import type { PluginHookUtils, ResolvedConfig } from '../config'
414
import { isDepOptimizationDisabled } from '../optimizer'
515
import type { HookHandler, Plugin, PluginWithRequiredHook } from '../plugin'
@@ -42,21 +52,35 @@ export async function resolvePlugins(
4252
Object.values(config.environments).some(
4353
(environment) => !isDepOptimizationDisabled(environment.dev.optimizeDeps),
4454
)
55+
const enableNativePlugin = config.experimental.enableNativePlugin
4556

4657
return [
4758
depOptimizationEnabled ? optimizedDepsPlugin() : null,
4859
isBuild ? metadataPlugin() : null,
4960
!isWorker ? watchPackageDataPlugin(config.packageCache) : null,
5061
preAliasPlugin(config),
51-
aliasPlugin({
52-
entries: config.resolve.alias,
53-
customResolver: viteAliasCustomResolver,
54-
}),
62+
enableNativePlugin
63+
? nativeAliasPlugin({
64+
entries: config.resolve.alias.map((item) => {
65+
return {
66+
find: item.find,
67+
replacement: item.replacement,
68+
}
69+
}),
70+
})
71+
: aliasPlugin({
72+
entries: config.resolve.alias,
73+
customResolver: viteAliasCustomResolver,
74+
}),
5575

5676
...prePlugins,
5777

5878
modulePreload !== false && modulePreload.polyfill
59-
? modulePreloadPolyfillPlugin(config)
79+
? enableNativePlugin
80+
? nativeModulePreloadPolyfillPlugin({
81+
skip: Boolean(config.command !== 'build' || config.build.ssr),
82+
})
83+
: modulePreloadPolyfillPlugin(config)
6084
: null,
6185
resolvePlugin(
6286
{
@@ -73,29 +97,46 @@ export async function resolvePlugins(
7397
),
7498
htmlInlineProxyPlugin(config),
7599
cssPlugin(config),
76-
config.esbuild !== false ? esbuildPlugin(config) : null,
77-
jsonPlugin(
78-
{
79-
namedExports: true,
80-
...config.json,
81-
},
82-
isBuild,
83-
),
84-
wasmHelperPlugin(),
100+
config.esbuild !== false
101+
? enableNativePlugin
102+
? nativeTransformPlugin()
103+
: esbuildPlugin(config)
104+
: null,
105+
enableNativePlugin
106+
? nativeJsonPlugin({
107+
stringify: config.json?.stringify,
108+
isBuild,
109+
})
110+
: jsonPlugin(
111+
{
112+
namedExports: true,
113+
...config.json,
114+
},
115+
isBuild,
116+
),
117+
enableNativePlugin ? nativeWasmHelperPlugin() : wasmHelperPlugin(),
85118
webWorkerPlugin(config),
86119
assetPlugin(config),
87120

88121
...normalPlugins,
89122

90-
wasmFallbackPlugin(),
123+
enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(),
124+
// TODO: support nativedefinePlugin
91125
definePlugin(config),
92126
cssPostPlugin(config),
93127
isBuild && buildHtmlPlugin(config),
94128
workerImportMetaUrlPlugin(config),
95129
assetImportMetaUrlPlugin(config),
96130
...buildPlugins.pre,
97-
dynamicImportVarsPlugin(config),
98-
importGlobPlugin(config),
131+
enableNativePlugin
132+
? nativeDynamicImportVarsPlugin()
133+
: dynamicImportVarsPlugin(config),
134+
enableNativePlugin
135+
? nativeImportGlobPlugin({
136+
root: config.root,
137+
restoreQueryExtension: config.experimental.importGlobRestoreExtension,
138+
})
139+
: importGlobPlugin(config),
99140

100141
...postPlugins,
101142

0 commit comments

Comments
 (0)