Skip to content

Commit 27c3543

Browse files
Native build plugin (#45)
* update * update * update * update * update justfile * alias plugin * update plugin config * update plugin config * update plugin config * update config * update config * update config * chore: 🤖 enable more plugin * chore: 🤖 update native build plugin * chore: 🤖 update * chore: 🤖 update
1 parent fe71cbc commit 27c3543

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

packages/vite/src/node/build.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type {
99
ModuleFormat,
1010
OutputOptions,
1111
Plugin,
12+
RolldownPlugin,
1213
RollupBuild,
1314
RollupError,
1415
RollupLog,
@@ -17,6 +18,10 @@ import type {
1718
// RollupWatcher,
1819
// WatcherOptions,
1920
} from 'rolldown'
21+
import {
22+
loadFallbackPlugin as nativeLoadFallbackPlugin,
23+
manifestPlugin as nativeManifestPlugin,
24+
} from 'rolldown/experimental'
2025
import type { RollupCommonJSOptions } from 'dep-types/commonjs'
2126
import type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars'
2227
import type { TransformOptions } from 'esbuild'
@@ -425,7 +430,7 @@ export function resolveBuildOptions(
425430

426431
export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
427432
pre: Plugin[]
428-
post: Plugin[]
433+
post: RolldownPlugin[]
429434
}> {
430435
const options = config.build
431436
// Note: The rolldown internal support commonjs
@@ -434,6 +439,7 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
434439
// !Array.isArray(commonjsOptions?.include) ||
435440
// commonjsOptions?.include.length !== 0
436441
const rollupOptionsPlugins = options.rollupOptions.plugins
442+
const enableNativePlugin = config.experimental.enableNativePlugin
437443
return {
438444
pre: [
439445
completeSystemWrapPlugin(),
@@ -445,17 +451,23 @@ export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{
445451
...(config.isWorker ? [webWorkerPostPlugin()] : []),
446452
],
447453
post: [
448-
buildImportAnalysisPlugin(config),
454+
...buildImportAnalysisPlugin(config),
449455
...(config.esbuild !== false ? [buildEsbuildPlugin(config)] : []),
450456
...(options.minify ? [terserPlugin(config)] : []),
451457
...(!config.isWorker
452458
? [
453-
...(options.manifest ? [manifestPlugin(config)] : []),
459+
...(options.manifest
460+
? [
461+
enableNativePlugin
462+
? nativeManifestPlugin()
463+
: manifestPlugin(config),
464+
]
465+
: []),
454466
...(options.ssrManifest ? [ssrManifestPlugin(config)] : []),
455467
buildReporterPlugin(config),
456468
]
457469
: []),
458-
loadFallbackPlugin(),
470+
enableNativePlugin ? nativeLoadFallbackPlugin() : loadFallbackPlugin(),
459471
],
460472
}
461473
}

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { init, parse as parseImports } from 'es-module-lexer'
88
import type { SourceMap } from 'rolldown'
99
import type { RawSourceMap } from '@ampproject/remapping'
1010
import convertSourceMap from 'convert-source-map'
11+
import { buildImportAnalysisPlugin as nativeBuildImportAnalysisPlugin } from 'rolldown/experimental'
1112
import {
1213
combineSourcemaps,
1314
generateCodeFrame,
@@ -162,9 +163,10 @@ function preload(
162163
/**
163164
* Build only. During serve this is performed as part of ./importAnalysis.
164165
*/
165-
export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
166+
export function buildImportAnalysisPlugin(config: ResolvedConfig): [Plugin] {
166167
const ssr = !!config.build.ssr
167168
const isWorker = config.isWorker
169+
const enableNativePlugin = config.experimental.enableNativePlugin
168170
const insertPreload = !(ssr || !!config.build.lib || isWorker)
169171

170172
const renderBuiltUrl = config.experimental.renderBuiltUrl
@@ -194,7 +196,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
194196
`function(dep) { return ${JSON.stringify(config.base)}+dep }`
195197
const preloadCode = `const scriptRel = ${scriptRel};const assetsURL = ${assetsURL};const seen = {};export const ${preloadMethod} = ${preload.toString()}`
196198

197-
return {
199+
const jsPlugin = {
198200
name: 'vite:build-import-analysis',
199201
resolveId(id) {
200202
if (id === preloadHelperId) {
@@ -710,5 +712,23 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
710712
}
711713
}
712714
},
715+
} as Plugin
716+
if (enableNativePlugin) {
717+
delete jsPlugin.transform
718+
delete jsPlugin.resolveId
719+
delete jsPlugin.load
713720
}
721+
return [
722+
jsPlugin,
723+
enableNativePlugin
724+
? nativeBuildImportAnalysisPlugin({
725+
preloadCode: preloadCode,
726+
insertPreload: insertPreload,
727+
/// this field looks redundant, put a dummy value for now
728+
optimizeModulePreloadRelativePaths: false,
729+
renderBuiltUrl: Boolean(renderBuiltUrl),
730+
isRelativeBase: isRelativeBase,
731+
})
732+
: null,
733+
].filter(Boolean) as [Plugin]
714734
}

playground/html/__tests__/html.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ describe.runIf(isServe)('invalid', () => {
299299

300300
test('should reload when fixed', async () => {
301301
await page.goto(viteTestUrl + '/invalid.html')
302-
await editFile('invalid.html', (content) => {
302+
editFile('invalid.html', (content) => {
303303
return content.replace('<div Bad', '<div> Good')
304304
})
305305
const content = await page.waitForSelector('text=Good HTML')

0 commit comments

Comments
 (0)