From c70fac90be642935ea68cbfa437072c74d763ffe Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 15:44:33 +0800 Subject: [PATCH 01/16] update --- packages/vite/src/node/plugins/index.ts | 38 +++++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 9fd937123a1ac1..4da323c3c06421 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -26,6 +26,16 @@ import { assetImportMetaUrlPlugin } from './assetImportMetaUrl' import { metadataPlugin } from './metadata' import { dynamicImportVarsPlugin } from './dynamicImportVars' import { importGlobPlugin } from './importMetaGlob' +import { + jsonPlugin as nativeJsonPlugin, + // aliasPlugin as nativeAliasPlugin, + // modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin, + transformPlugin as nativeTransformPlugin, + wasmHelperPlugin as nativeWasmHelperPlugin, + // wasmFallbackPlugin as nativeWasmFallbackPlugin, + // dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin, + // importGlobPlugin as nativeImportGlobPlugin, +} from 'rolldown/experimental' export async function resolvePlugins( config: ResolvedConfig, @@ -39,6 +49,7 @@ export async function resolvePlugins( ? await (await import('../build')).resolveBuildPlugins(config) : { pre: [], post: [] } const { modulePreload } = config.build + const enableNativePlugin = config.experimental.enableNativePlugin const depsOptimizerEnabled = !isBuild && (isDepsOptimizerEnabled(config, false) || @@ -75,15 +86,24 @@ export async function resolvePlugins( }), htmlInlineProxyPlugin(config), cssPlugin(config), - config.esbuild !== false ? esbuildPlugin(config) : null, - jsonPlugin( - { - namedExports: true, - ...config.json, - }, - isBuild, - ), - wasmHelperPlugin(config), + config.esbuild !== false + ? enableNativePlugin + ? nativeTransformPlugin() + : esbuildPlugin(config) + : null, + enableNativePlugin + ? nativeJsonPlugin({ + stringify: config.json?.stringify, + isBuild, + }) + : jsonPlugin( + { + namedExports: true, + ...config.json, + }, + isBuild, + ), + enableNativePlugin ? nativeWasmHelperPlugin():wasmHelperPlugin(config), webWorkerPlugin(config), assetPlugin(config), ...normalPlugins, From 98099f07f057264eabea6a2190ddbbf6e4ab59e3 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:15:58 +0800 Subject: [PATCH 02/16] update --- justfile | 4 ++ packages/vite/src/node/build.ts | 93 +++++++++++++------------ packages/vite/src/node/config.ts | 2 +- packages/vite/src/node/plugins/index.ts | 10 +-- 4 files changed, 57 insertions(+), 52 deletions(-) diff --git a/justfile b/justfile index 568db64a24d54e..abeaf5545912eb 100644 --- a/justfile +++ b/justfile @@ -1,2 +1,6 @@ build-vite: pnpm --filter vite run build-bundle + +test: + pnpm run test-serve + pnpm run test-build diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index bdba4f9fd8ef41..ebedcf672edaa9 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -9,6 +9,7 @@ import type { ModuleFormat, OutputOptions, Plugin, + RolldownPlugin, RollupBuild, RollupError, RollupLog, @@ -110,8 +111,8 @@ export interface BuildOptions { * @default 4096 */ assetsInlineLimit?: - | number - | ((filePath: string, content: Buffer) => boolean | undefined) + | number + | ((filePath: string, content: Buffer) => boolean | undefined) /** * Whether to code-split CSS. When enabled, CSS in async chunks will be * inlined as strings in the chunk and inserted via dynamically created @@ -379,9 +380,9 @@ export function resolveBuildOptions( ? false : typeof modulePreload === 'object' ? { - ...defaultModulePreload, - ...modulePreload, - } + ...defaultModulePreload, + ...modulePreload, + } : defaultModulePreload, } @@ -402,7 +403,7 @@ export function resolveBuildOptions( // esnext + terser 5.16<: limit to es2021 so it can be minified by terser resolved.target = 'es2021' } - } catch {} + } catch { } } if (!resolved.cssTarget) { @@ -424,9 +425,10 @@ export function resolveBuildOptions( } export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ - pre: Plugin[] - post: Plugin[] + pre: (RolldownPlugin | null)[] + post: (RolldownPlugin | null)[] }> { + // const enableNativePlugin = config.experimental.enableNativePlugin; const options = config.build // Note: The rolldown internal support commonjs // const { commonjsOptions } = options @@ -450,10 +452,10 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ ...(options.minify ? [terserPlugin(config)] : []), ...(!config.isWorker ? [ - ...(options.manifest ? [manifestPlugin(config)] : []), - ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []), - buildReporterPlugin(config), - ] + ...(options.manifest ? [manifestPlugin(config)] : []), + ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []), + buildReporterPlugin(config), + ] : []), loadFallbackPlugin(), ], @@ -489,16 +491,16 @@ export async function build( const resolve = (p: string) => path.resolve(config.root, p) const input = libOptions ? options.rollupOptions?.input || - (typeof libOptions.entry === 'string' - ? resolve(libOptions.entry) - : Array.isArray(libOptions.entry) - ? libOptions.entry.map(resolve) - : Object.fromEntries( - Object.entries(libOptions.entry).map(([alias, file]) => [ - alias, - resolve(file), - ]), - )) + (typeof libOptions.entry === 'string' + ? resolve(libOptions.entry) + : Array.isArray(libOptions.entry) + ? libOptions.entry.map(resolve) + : Object.fromEntries( + Object.entries(libOptions.entry).map(([alias, file]) => [ + alias, + resolve(file), + ]), + )) : typeof options.ssr === 'string' ? resolve(options.ssr) : options.rollupOptions?.input || resolve('index.html') @@ -506,7 +508,7 @@ export async function build( if (ssr && typeof input === 'string' && input.endsWith('.html')) { throw new Error( `rollupOptions.input should not be an html file when building for SSR. ` + - `Please specify a dedicated SSR entry.`, + `Please specify a dedicated SSR entry.`, ) } if (config.build.cssCodeSplit === false) { @@ -615,8 +617,8 @@ export async function build( if (output.output) { logger.warn( `You've set "rollupOptions.output.output" in your config. ` + - `This is deprecated and will override all Vite.js default output options. ` + - `Please use "rollupOptions.output" instead.`, + `This is deprecated and will override all Vite.js default output options. ` + + `Please use "rollupOptions.output" instead.`, ) } // if (output.file) { @@ -629,7 +631,7 @@ export async function build( logger.warnOnce( colors.yellow( `Vite does not support "rollupOptions.output.sourcemap". ` + - `Please use "build.sourcemap" instead.`, + `Please use "build.sourcemap" instead.`, ), ) } @@ -641,10 +643,10 @@ export async function build( const jsExt = ssrNodeBuild || libOptions ? resolveOutputJsExtension( - format, - findNearestPackageData(config.root, config.packageCache)?.data - .type, - ) + format, + findNearestPackageData(config.root, config.packageCache)?.data + .type, + ) : 'js' return { dir: outDir, @@ -662,14 +664,14 @@ export async function build( ? `[name].${jsExt}` : libOptions ? ({ name }) => - resolveLibFilename( - libOptions, - format, - name, - config.root, - jsExt, - config.packageCache, - ) + resolveLibFilename( + libOptions, + format, + name, + config.root, + jsExt, + config.packageCache, + ) : path.posix.join(options.assetsDir, `[name]-[hash].${jsExt}`), chunkFileNames: libOptions ? `[name]-[hash].${jsExt}` @@ -972,9 +974,9 @@ export function onRollupWarning( if (!id || !id.endsWith('?commonjs-external')) { throw new Error( `[vite]: Rollup failed to resolve import "${exporter}" from "${id}".\n` + - `This is most likely unintended because it can break your application at runtime.\n` + - `If you do want to externalize this module explicitly add it to\n` + - `\`build.rollupOptions.external\``, + `This is most likely unintended because it can break your application at runtime.\n` + + `If you do want to externalize this module explicitly add it to\n` + + `\`build.rollupOptions.external\``, ) } } @@ -1051,7 +1053,7 @@ function wrapSsrResolveId(hook?: Plugin['resolveId']): Plugin['resolveId'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['resolveId'] = function (id, importer, options) { + const handler: Plugin['resolveId'] = function(id, importer, options) { return fn.call(this, id, importer, injectSsrFlag(options)) } @@ -1069,7 +1071,7 @@ function wrapSsrLoad(hook?: Plugin['load']): Plugin['load'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['load'] = function (id, ...args) { + const handler: Plugin['load'] = function(id, ...args) { // @ts-expect-error: Receiving options param to be future-proof if Rollup adds it return fn.call(this, id, injectSsrFlag(args[0])) } @@ -1088,7 +1090,7 @@ function wrapSsrTransform(hook?: Plugin['transform']): Plugin['transform'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['transform'] = function ( + const handler: Plugin['transform'] = function( code, importer, meta, @@ -1138,8 +1140,7 @@ const getResolveUrl = (path: string, URL = 'URL') => `new ${URL}(${path}).href` const getRelativeUrlFromDocument = (relativePath: string, umd = false) => getResolveUrl( - `'${escapeId(partialEncodeURIPath(relativePath))}', ${ - umd ? `typeof document === 'undefined' ? location.href : ` : '' + `'${escapeId(partialEncodeURIPath(relativePath))}', ${umd ? `typeof document === 'undefined' ? location.href : ` : '' }document.currentScript && document.currentScript.src || document.baseURI`, ) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 47b72715f8fd00..c7b2de69c16a63 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -836,7 +836,7 @@ export async function resolveConfig( experimental: { importGlobRestoreExtension: false, hmrPartialAccept: false, - enableNativePlugin: true, + enableNativePlugin: false, ...config.experimental, }, getSortedPlugins: undefined!, diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 4da323c3c06421..46e96641f73689 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -28,11 +28,11 @@ import { dynamicImportVarsPlugin } from './dynamicImportVars' import { importGlobPlugin } from './importMetaGlob' import { jsonPlugin as nativeJsonPlugin, - // aliasPlugin as nativeAliasPlugin, + aliasPlugin as nativeAliasPlugin, // modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin, transformPlugin as nativeTransformPlugin, wasmHelperPlugin as nativeWasmHelperPlugin, - // wasmFallbackPlugin as nativeWasmFallbackPlugin, + wasmFallbackPlugin as nativeWasmFallbackPlugin, // dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin, // importGlobPlugin as nativeImportGlobPlugin, } from 'rolldown/experimental' @@ -88,7 +88,7 @@ export async function resolvePlugins( cssPlugin(config), config.esbuild !== false ? enableNativePlugin - ? nativeTransformPlugin() + ? esbuildPlugin(config) : esbuildPlugin(config) : null, enableNativePlugin @@ -107,8 +107,8 @@ export async function resolvePlugins( webWorkerPlugin(config), assetPlugin(config), ...normalPlugins, - wasmFallbackPlugin(), - definePlugin(config), + enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), + enableNativePlugin ? null : definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), workerImportMetaUrlPlugin(config), From 9746f46dd04076bbeff0718aacd2b6f879c4baac Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:17:24 +0800 Subject: [PATCH 03/16] update --- justfile | 2 + packages/vite/src/node/build.ts | 87 +++++++++++++------------ packages/vite/src/node/plugins/index.ts | 2 +- 3 files changed, 47 insertions(+), 44 deletions(-) diff --git a/justfile b/justfile index abeaf5545912eb..613289837cbbe1 100644 --- a/justfile +++ b/justfile @@ -3,4 +3,6 @@ build-vite: test: pnpm run test-serve + +test-build: pnpm run test-build diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index ebedcf672edaa9..f4c530bee9f350 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -111,8 +111,8 @@ export interface BuildOptions { * @default 4096 */ assetsInlineLimit?: - | number - | ((filePath: string, content: Buffer) => boolean | undefined) + | number + | ((filePath: string, content: Buffer) => boolean | undefined) /** * Whether to code-split CSS. When enabled, CSS in async chunks will be * inlined as strings in the chunk and inserted via dynamically created @@ -380,9 +380,9 @@ export function resolveBuildOptions( ? false : typeof modulePreload === 'object' ? { - ...defaultModulePreload, - ...modulePreload, - } + ...defaultModulePreload, + ...modulePreload, + } : defaultModulePreload, } @@ -403,7 +403,7 @@ export function resolveBuildOptions( // esnext + terser 5.16<: limit to es2021 so it can be minified by terser resolved.target = 'es2021' } - } catch { } + } catch {} } if (!resolved.cssTarget) { @@ -452,10 +452,10 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ ...(options.minify ? [terserPlugin(config)] : []), ...(!config.isWorker ? [ - ...(options.manifest ? [manifestPlugin(config)] : []), - ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []), - buildReporterPlugin(config), - ] + ...(options.manifest ? [manifestPlugin(config)] : []), + ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []), + buildReporterPlugin(config), + ] : []), loadFallbackPlugin(), ], @@ -491,16 +491,16 @@ export async function build( const resolve = (p: string) => path.resolve(config.root, p) const input = libOptions ? options.rollupOptions?.input || - (typeof libOptions.entry === 'string' - ? resolve(libOptions.entry) - : Array.isArray(libOptions.entry) - ? libOptions.entry.map(resolve) - : Object.fromEntries( - Object.entries(libOptions.entry).map(([alias, file]) => [ - alias, - resolve(file), - ]), - )) + (typeof libOptions.entry === 'string' + ? resolve(libOptions.entry) + : Array.isArray(libOptions.entry) + ? libOptions.entry.map(resolve) + : Object.fromEntries( + Object.entries(libOptions.entry).map(([alias, file]) => [ + alias, + resolve(file), + ]), + )) : typeof options.ssr === 'string' ? resolve(options.ssr) : options.rollupOptions?.input || resolve('index.html') @@ -508,7 +508,7 @@ export async function build( if (ssr && typeof input === 'string' && input.endsWith('.html')) { throw new Error( `rollupOptions.input should not be an html file when building for SSR. ` + - `Please specify a dedicated SSR entry.`, + `Please specify a dedicated SSR entry.`, ) } if (config.build.cssCodeSplit === false) { @@ -617,8 +617,8 @@ export async function build( if (output.output) { logger.warn( `You've set "rollupOptions.output.output" in your config. ` + - `This is deprecated and will override all Vite.js default output options. ` + - `Please use "rollupOptions.output" instead.`, + `This is deprecated and will override all Vite.js default output options. ` + + `Please use "rollupOptions.output" instead.`, ) } // if (output.file) { @@ -631,7 +631,7 @@ export async function build( logger.warnOnce( colors.yellow( `Vite does not support "rollupOptions.output.sourcemap". ` + - `Please use "build.sourcemap" instead.`, + `Please use "build.sourcemap" instead.`, ), ) } @@ -643,10 +643,10 @@ export async function build( const jsExt = ssrNodeBuild || libOptions ? resolveOutputJsExtension( - format, - findNearestPackageData(config.root, config.packageCache)?.data - .type, - ) + format, + findNearestPackageData(config.root, config.packageCache)?.data + .type, + ) : 'js' return { dir: outDir, @@ -664,14 +664,14 @@ export async function build( ? `[name].${jsExt}` : libOptions ? ({ name }) => - resolveLibFilename( - libOptions, - format, - name, - config.root, - jsExt, - config.packageCache, - ) + resolveLibFilename( + libOptions, + format, + name, + config.root, + jsExt, + config.packageCache, + ) : path.posix.join(options.assetsDir, `[name]-[hash].${jsExt}`), chunkFileNames: libOptions ? `[name]-[hash].${jsExt}` @@ -974,9 +974,9 @@ export function onRollupWarning( if (!id || !id.endsWith('?commonjs-external')) { throw new Error( `[vite]: Rollup failed to resolve import "${exporter}" from "${id}".\n` + - `This is most likely unintended because it can break your application at runtime.\n` + - `If you do want to externalize this module explicitly add it to\n` + - `\`build.rollupOptions.external\``, + `This is most likely unintended because it can break your application at runtime.\n` + + `If you do want to externalize this module explicitly add it to\n` + + `\`build.rollupOptions.external\``, ) } } @@ -1053,7 +1053,7 @@ function wrapSsrResolveId(hook?: Plugin['resolveId']): Plugin['resolveId'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['resolveId'] = function(id, importer, options) { + const handler: Plugin['resolveId'] = function (id, importer, options) { return fn.call(this, id, importer, injectSsrFlag(options)) } @@ -1071,7 +1071,7 @@ function wrapSsrLoad(hook?: Plugin['load']): Plugin['load'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['load'] = function(id, ...args) { + const handler: Plugin['load'] = function (id, ...args) { // @ts-expect-error: Receiving options param to be future-proof if Rollup adds it return fn.call(this, id, injectSsrFlag(args[0])) } @@ -1090,7 +1090,7 @@ function wrapSsrTransform(hook?: Plugin['transform']): Plugin['transform'] { if (!hook) return const fn = getHookHandler(hook) - const handler: Plugin['transform'] = function( + const handler: Plugin['transform'] = function ( code, importer, meta, @@ -1140,7 +1140,8 @@ const getResolveUrl = (path: string, URL = 'URL') => `new ${URL}(${path}).href` const getRelativeUrlFromDocument = (relativePath: string, umd = false) => getResolveUrl( - `'${escapeId(partialEncodeURIPath(relativePath))}', ${umd ? `typeof document === 'undefined' ? location.href : ` : '' + `'${escapeId(partialEncodeURIPath(relativePath))}', ${ + umd ? `typeof document === 'undefined' ? location.href : ` : '' }document.currentScript && document.currentScript.src || document.baseURI`, ) diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 46e96641f73689..c14b19af3215a8 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -103,7 +103,7 @@ export async function resolvePlugins( }, isBuild, ), - enableNativePlugin ? nativeWasmHelperPlugin():wasmHelperPlugin(config), + enableNativePlugin ? nativeWasmHelperPlugin() : wasmHelperPlugin(config), webWorkerPlugin(config), assetPlugin(config), ...normalPlugins, From 22bab80b4669b08e98689904d32fe6cb1a30fb3a Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:21:42 +0800 Subject: [PATCH 04/16] update --- justfile | 3 +++ packages/vite/src/node/plugins/index.ts | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/justfile b/justfile index 613289837cbbe1..28a96bd2b61913 100644 --- a/justfile +++ b/justfile @@ -6,3 +6,6 @@ test: test-build: pnpm run test-build + +fmt: + pnpm --filter vite run format diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index c14b19af3215a8..ff8843a78b76f9 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -59,10 +59,19 @@ export async function resolvePlugins( isBuild ? metadataPlugin() : null, !isWorker ? watchPackageDataPlugin(config.packageCache) : null, preAliasPlugin(config), - aliasPlugin({ - entries: config.resolve.alias, - customResolver: viteAliasCustomResolver, - }), + enableNativePlugin + ? nativeAliasPlugin({ + entries: config.resolve.alias.map((item) => { + return { + find: item.find, + replacement: item.replacement, + } + }), + }) + : aliasPlugin({ + entries: config.resolve.alias, + customResolver: viteAliasCustomResolver, + }), ...prePlugins, modulePreload !== false && modulePreload.polyfill ? modulePreloadPolyfillPlugin(config) From a6ae3f0e66958bffadfd5bb46c36a7f03d4807d8 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:23:05 +0800 Subject: [PATCH 05/16] update justfile --- justfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 28a96bd2b61913..d4ae9ad619939c 100644 --- a/justfile +++ b/justfile @@ -1,11 +1,13 @@ build-vite: pnpm --filter vite run build-bundle -test: +test-serve: pnpm run test-serve test-build: pnpm run test-build +test: test-serve test-build + fmt: pnpm --filter vite run format From bbc855c31d962adc03f36c13ff64edbd140a613b Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:36:33 +0800 Subject: [PATCH 06/16] alias plugin --- packages/vite/src/node/plugins/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index ff8843a78b76f9..2b090d0401dd0a 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -30,7 +30,7 @@ import { jsonPlugin as nativeJsonPlugin, aliasPlugin as nativeAliasPlugin, // modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin, - transformPlugin as nativeTransformPlugin, + // transformPlugin as nativeTransformPlugin, wasmHelperPlugin as nativeWasmHelperPlugin, wasmFallbackPlugin as nativeWasmFallbackPlugin, // dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin, @@ -59,7 +59,7 @@ export async function resolvePlugins( isBuild ? metadataPlugin() : null, !isWorker ? watchPackageDataPlugin(config.packageCache) : null, preAliasPlugin(config), - enableNativePlugin + (enableNativePlugin && isBuild) ? nativeAliasPlugin({ entries: config.resolve.alias.map((item) => { return { From 4a3bcd3ed3eda8ebdda90411691a85bb5c99dbce Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:41:28 +0800 Subject: [PATCH 07/16] update plugin config --- packages/vite/src/node/plugins/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 2b090d0401dd0a..a2fe065554c01f 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -117,7 +117,7 @@ export async function resolvePlugins( assetPlugin(config), ...normalPlugins, enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), - enableNativePlugin ? null : definePlugin(config), + (enableNativePlugin && isBuild) ? null : definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), workerImportMetaUrlPlugin(config), From 06c18e21988b8721a0ca26b82266ce8c7f557d3f Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 16:59:25 +0800 Subject: [PATCH 08/16] update plugin config --- packages/vite/src/node/config.ts | 2 +- packages/vite/src/node/plugins/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index c7b2de69c16a63..47b72715f8fd00 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -836,7 +836,7 @@ export async function resolveConfig( experimental: { importGlobRestoreExtension: false, hmrPartialAccept: false, - enableNativePlugin: false, + enableNativePlugin: true, ...config.experimental, }, getSortedPlugins: undefined!, diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index a2fe065554c01f..b19fa98c51f165 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -59,7 +59,7 @@ export async function resolvePlugins( isBuild ? metadataPlugin() : null, !isWorker ? watchPackageDataPlugin(config.packageCache) : null, preAliasPlugin(config), - (enableNativePlugin && isBuild) + (false && isBuild) ? nativeAliasPlugin({ entries: config.resolve.alias.map((item) => { return { @@ -100,7 +100,7 @@ export async function resolvePlugins( ? esbuildPlugin(config) : esbuildPlugin(config) : null, - enableNativePlugin + false ? nativeJsonPlugin({ stringify: config.json?.stringify, isBuild, From b02fe38942d2babd78ef041f9f8698d5c5e5b575 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Tue, 10 Sep 2024 17:44:55 +0800 Subject: [PATCH 09/16] update plugin config --- packages/vite/src/node/plugins/index.ts | 2 +- playground/json/vite.config.js | 7 +++++++ playground/vitestSetup.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 playground/json/vite.config.js diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index b19fa98c51f165..6449abf4686117 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -117,7 +117,7 @@ export async function resolvePlugins( assetPlugin(config), ...normalPlugins, enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), - (enableNativePlugin && isBuild) ? null : definePlugin(config), + (false && isBuild) ? null : definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), workerImportMetaUrlPlugin(config), diff --git a/playground/json/vite.config.js b/playground/json/vite.config.js new file mode 100644 index 00000000000000..a6030a3778f785 --- /dev/null +++ b/playground/json/vite.config.js @@ -0,0 +1,7 @@ +import {defineConfig} from 'vite' + +export default defineConfig({ + build: { + minify: false + } +}) diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index eb28b5f544d453..84f1cc3cb7499d 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -263,7 +263,7 @@ export async function startDefaultServe(): Promise { const buildConfig = mergeConfig( await loadConfig({ command: 'build', mode: 'production' }), { - plugins: [resolvedPlugin()], + plugins: [resolvedPlugin() as any], }, ) const rollupOutput = await build(buildConfig) From fd96bc2c01b9a460640926bf704281c180fe57d3 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Wed, 11 Sep 2024 22:34:41 +0800 Subject: [PATCH 10/16] update config --- packages/vite/src/node/plugins/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 6449abf4686117..400dcab933858d 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -112,11 +112,12 @@ export async function resolvePlugins( }, isBuild, ), - enableNativePlugin ? nativeWasmHelperPlugin() : wasmHelperPlugin(config), + (enableNativePlugin && isBuild) ? nativeWasmHelperPlugin() : wasmHelperPlugin(config), webWorkerPlugin(config), assetPlugin(config), ...normalPlugins, - enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), + (enableNativePlugin && isBuild) ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), + // TODO: support nativedefinePlugin (false && isBuild) ? null : definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), From ede706ccf63bb62c164aa3147ae17b14a14c7041 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Wed, 11 Sep 2024 23:52:24 +0800 Subject: [PATCH 11/16] update config --- playground/json/vite.config.js | 7 ------- playground/vitestSetup.ts | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 playground/json/vite.config.js diff --git a/playground/json/vite.config.js b/playground/json/vite.config.js deleted file mode 100644 index a6030a3778f785..00000000000000 --- a/playground/json/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import {defineConfig} from 'vite' - -export default defineConfig({ - build: { - minify: false - } -}) diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index 84f1cc3cb7499d..eb28b5f544d453 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -263,7 +263,7 @@ export async function startDefaultServe(): Promise { const buildConfig = mergeConfig( await loadConfig({ command: 'build', mode: 'production' }), { - plugins: [resolvedPlugin() as any], + plugins: [resolvedPlugin()], }, ) const rollupOutput = await build(buildConfig) From ebbe8fba1317db9cc3c8362cced10fd0d079b401 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Wed, 11 Sep 2024 23:55:53 +0800 Subject: [PATCH 12/16] update config --- packages/vite/src/node/build.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index f4c530bee9f350..bdba4f9fd8ef41 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -9,7 +9,6 @@ import type { ModuleFormat, OutputOptions, Plugin, - RolldownPlugin, RollupBuild, RollupError, RollupLog, @@ -425,10 +424,9 @@ export function resolveBuildOptions( } export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ - pre: (RolldownPlugin | null)[] - post: (RolldownPlugin | null)[] + pre: Plugin[] + post: Plugin[] }> { - // const enableNativePlugin = config.experimental.enableNativePlugin; const options = config.build // Note: The rolldown internal support commonjs // const { commonjsOptions } = options From e51dbe506a99f8eca2ccfcfb1dd4c0fe865e4752 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Thu, 12 Sep 2024 00:15:14 +0800 Subject: [PATCH 13/16] =?UTF-8?q?chore:=20=F0=9F=A4=96=20enable=20more=20p?= =?UTF-8?q?lugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/vite/src/node/config.ts | 2 +- packages/vite/src/node/plugins/index.ts | 49 +++++++++++++++---------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 47b72715f8fd00..c7b2de69c16a63 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -836,7 +836,7 @@ export async function resolveConfig( experimental: { importGlobRestoreExtension: false, hmrPartialAccept: false, - enableNativePlugin: true, + enableNativePlugin: false, ...config.experimental, }, getSortedPlugins: undefined!, diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 400dcab933858d..caa875feded2ff 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -1,5 +1,15 @@ import aliasPlugin, { type ResolverFunction } from '@rollup/plugin-alias' import type { ObjectHook } from 'rolldown' +import { + aliasPlugin as nativeAliasPlugin, + dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin, + importGlobPlugin as nativeImportGlobPlugin, + jsonPlugin as nativeJsonPlugin, + modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin, + transformPlugin as nativeTransformPlugin, + wasmFallbackPlugin as nativeWasmFallbackPlugin, + wasmHelperPlugin as nativeWasmHelperPlugin, +} from 'rolldown/experimental' import type { PluginHookUtils, ResolvedConfig } from '../config' import { isDepsOptimizerEnabled } from '../config' import type { HookHandler, Plugin, PluginWithRequiredHook } from '../plugin' @@ -26,16 +36,6 @@ import { assetImportMetaUrlPlugin } from './assetImportMetaUrl' import { metadataPlugin } from './metadata' import { dynamicImportVarsPlugin } from './dynamicImportVars' import { importGlobPlugin } from './importMetaGlob' -import { - jsonPlugin as nativeJsonPlugin, - aliasPlugin as nativeAliasPlugin, - // modulePreloadPolyfillPlugin as nativeModulePreloadPolyfillPlugin, - // transformPlugin as nativeTransformPlugin, - wasmHelperPlugin as nativeWasmHelperPlugin, - wasmFallbackPlugin as nativeWasmFallbackPlugin, - // dynamicImportVarsPlugin as nativeDynamicImportVarsPlugin, - // importGlobPlugin as nativeImportGlobPlugin, -} from 'rolldown/experimental' export async function resolvePlugins( config: ResolvedConfig, @@ -59,7 +59,7 @@ export async function resolvePlugins( isBuild ? metadataPlugin() : null, !isWorker ? watchPackageDataPlugin(config.packageCache) : null, preAliasPlugin(config), - (false && isBuild) + enableNativePlugin ? nativeAliasPlugin({ entries: config.resolve.alias.map((item) => { return { @@ -74,7 +74,11 @@ export async function resolvePlugins( }), ...prePlugins, modulePreload !== false && modulePreload.polyfill - ? modulePreloadPolyfillPlugin(config) + ? enableNativePlugin + ? nativeModulePreloadPolyfillPlugin({ + skip: Boolean(config.command !== 'build' || config.build.ssr), + }) + : modulePreloadPolyfillPlugin(config) : null, resolvePlugin({ ...config.resolve, @@ -97,10 +101,10 @@ export async function resolvePlugins( cssPlugin(config), config.esbuild !== false ? enableNativePlugin - ? esbuildPlugin(config) + ? nativeTransformPlugin() : esbuildPlugin(config) : null, - false + enableNativePlugin ? nativeJsonPlugin({ stringify: config.json?.stringify, isBuild, @@ -112,20 +116,27 @@ export async function resolvePlugins( }, isBuild, ), - (enableNativePlugin && isBuild) ? nativeWasmHelperPlugin() : wasmHelperPlugin(config), + enableNativePlugin ? nativeWasmHelperPlugin() : wasmHelperPlugin(config), webWorkerPlugin(config), assetPlugin(config), ...normalPlugins, - (enableNativePlugin && isBuild) ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), + enableNativePlugin ? nativeWasmFallbackPlugin() : wasmFallbackPlugin(), // TODO: support nativedefinePlugin - (false && isBuild) ? null : definePlugin(config), + definePlugin(config), cssPostPlugin(config), isBuild && buildHtmlPlugin(config), workerImportMetaUrlPlugin(config), assetImportMetaUrlPlugin(config), ...buildPlugins.pre, - dynamicImportVarsPlugin(config), - importGlobPlugin(config), + enableNativePlugin + ? nativeDynamicImportVarsPlugin() + : dynamicImportVarsPlugin(config), + enableNativePlugin + ? nativeImportGlobPlugin({ + root: config.root, + restoreQueryExtension: config.experimental.importGlobRestoreExtension, + }) + : importGlobPlugin(config), ...postPlugins, ...buildPlugins.post, // internal server-only plugins are always applied after everything else From a7ff55963e25e195a70da091b1d56d7f5fe8f01a Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Thu, 12 Sep 2024 16:05:27 +0800 Subject: [PATCH 14/16] =?UTF-8?q?chore:=20=F0=9F=A4=96=20update=20native?= =?UTF-8?q?=20build=20plugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/vite/src/node/build.ts | 20 ++++++++++++---- .../src/node/plugins/importAnalysisBuild.ts | 24 +++++++++++++++++-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index bdba4f9fd8ef41..47f83fce04c706 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -9,6 +9,7 @@ import type { ModuleFormat, OutputOptions, Plugin, + RolldownPlugin, RollupBuild, RollupError, RollupLog, @@ -17,6 +18,10 @@ import type { // RollupWatcher, // WatcherOptions, } from 'rolldown' +import { + loadFallbackPlugin as nativeLoadFallbackPlugin, + manifestPlugin as nativeManifestPlugin, +} from 'rolldown/experimental' import type { RollupCommonJSOptions } from 'dep-types/commonjs' import type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars' import type { TransformOptions } from 'esbuild' @@ -425,7 +430,7 @@ export function resolveBuildOptions( export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ pre: Plugin[] - post: Plugin[] + post: RolldownPlugin[] }> { const options = config.build // Note: The rolldown internal support commonjs @@ -434,6 +439,7 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ // !Array.isArray(commonjsOptions?.include) || // commonjsOptions?.include.length !== 0 const rollupOptionsPlugins = options.rollupOptions.plugins + const enableNativePlugin = config.experimental.enableNativePlugin return { pre: [ completeSystemWrapPlugin(), @@ -445,17 +451,23 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ ...(config.isWorker ? [webWorkerPostPlugin()] : []), ], post: [ - buildImportAnalysisPlugin(config), + ...buildImportAnalysisPlugin(config), ...(config.esbuild !== false ? [buildEsbuildPlugin(config)] : []), ...(options.minify ? [terserPlugin(config)] : []), ...(!config.isWorker ? [ - ...(options.manifest ? [manifestPlugin(config)] : []), + ...(options.manifest + ? [ + enableNativePlugin + ? nativeManifestPlugin() + : manifestPlugin(config), + ] + : []), ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []), buildReporterPlugin(config), ] : []), - loadFallbackPlugin(), + enableNativePlugin ? nativeLoadFallbackPlugin() : loadFallbackPlugin(), ], } } diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 8e57bdc3015e61..09dea3296a2892 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -8,6 +8,7 @@ import { init, parse as parseImports } from 'es-module-lexer' import type { SourceMap } from 'rolldown' import type { RawSourceMap } from '@ampproject/remapping' import convertSourceMap from 'convert-source-map' +import { buildImportAnalysisPlugin as nativeBuildImportAnalysisPlugin } from 'rolldown/experimental' import { combineSourcemaps, generateCodeFrame, @@ -162,9 +163,10 @@ function preload( /** * Build only. During serve this is performed as part of ./importAnalysis. */ -export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { +export function buildImportAnalysisPlugin(config: ResolvedConfig): [Plugin] { const ssr = !!config.build.ssr const isWorker = config.isWorker + const enableNativePlugin = config.experimental.enableNativePlugin const insertPreload = !(ssr || !!config.build.lib || isWorker) const renderBuiltUrl = config.experimental.renderBuiltUrl @@ -194,7 +196,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { `function(dep) { return ${JSON.stringify(config.base)}+dep }` const preloadCode = `const scriptRel = ${scriptRel};const assetsURL = ${assetsURL};const seen = {};export const ${preloadMethod} = ${preload.toString()}` - return { + const jsPlugin = { name: 'vite:build-import-analysis', resolveId(id) { if (id === preloadHelperId) { @@ -710,5 +712,23 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } } }, + } as Plugin + if (enableNativePlugin) { + delete jsPlugin.transform + delete jsPlugin.resolveId + delete jsPlugin.load } + return [ + jsPlugin, + enableNativePlugin + ? nativeBuildImportAnalysisPlugin({ + preloadCode: preloadCode, + insertPreload: insertPreload, + /// this field looks redundant, put a dummy value for now + optimizeModulePreloadRelativePaths: false, + renderBuiltUrl: Boolean(renderBuiltUrl), + isRelativeBase: isRelativeBase, + }) + : null, + ].filter(Boolean) as [Plugin] } From 314db42d825d6fbb4f5073ee7efef7358bd36122 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Thu, 12 Sep 2024 16:23:45 +0800 Subject: [PATCH 15/16] =?UTF-8?q?chore:=20=F0=9F=A4=96=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playground/html/__tests__/html.spec.ts | 2 +- playground/html/invalid.html | 2 +- vitest.config.e2e.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/playground/html/__tests__/html.spec.ts b/playground/html/__tests__/html.spec.ts index 85ceea961752ee..52c6132b8631d2 100644 --- a/playground/html/__tests__/html.spec.ts +++ b/playground/html/__tests__/html.spec.ts @@ -299,7 +299,7 @@ describe.runIf(isServe)('invalid', () => { test('should reload when fixed', async () => { await page.goto(viteTestUrl + '/invalid.html') - await editFile('invalid.html', (content) => { + editFile('invalid.html', (content) => { return content.replace('
Good') }) const content = await page.waitForSelector('text=Good HTML') diff --git a/playground/html/invalid.html b/playground/html/invalid.html index 8acea73f16bdad..60e9004e61337a 100644 --- a/playground/html/invalid.html +++ b/playground/html/invalid.html @@ -1 +1 @@ -
+
Bad HTML
diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts index 2e2412167d0d76..b6b0a3d236933a 100644 --- a/vitest.config.e2e.ts +++ b/vitest.config.e2e.ts @@ -10,7 +10,7 @@ export default defineConfig({ }, }, test: { - include: ['./playground/**/*.spec.[tj]s'], + include: ['./playground/html/**/*.spec.[tj]s'], exclude: [ './playground/assets/**/*.spec.[tj]s', './playground/backend-integration/**/*.spec.[tj]s', From ad5a7ad3ecfd31079798dd07c1a191d1e72ca1d6 Mon Sep 17 00:00:00 2001 From: IWANABETHATGUY Date: Thu, 12 Sep 2024 16:27:19 +0800 Subject: [PATCH 16/16] =?UTF-8?q?chore:=20=F0=9F=A4=96=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playground/html/invalid.html | 2 +- vitest.config.e2e.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playground/html/invalid.html b/playground/html/invalid.html index 60e9004e61337a..8acea73f16bdad 100644 --- a/playground/html/invalid.html +++ b/playground/html/invalid.html @@ -1 +1 @@ -
Bad HTML
+
diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts index b6b0a3d236933a..2e2412167d0d76 100644 --- a/vitest.config.e2e.ts +++ b/vitest.config.e2e.ts @@ -10,7 +10,7 @@ export default defineConfig({ }, }, test: { - include: ['./playground/html/**/*.spec.[tj]s'], + include: ['./playground/**/*.spec.[tj]s'], exclude: [ './playground/assets/**/*.spec.[tj]s', './playground/backend-integration/**/*.spec.[tj]s',