Skip to content

Commit ab62ca4

Browse files
authored
feat(legacy): add rolldown-vite support (#20417)
1 parent c4d5940 commit ab62ca4

File tree

5 files changed

+125
-5
lines changed

5 files changed

+125
-5
lines changed

packages/plugin-legacy/package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,16 @@
3232
},
3333
"homepage": "https://github.com/vitejs/vite/tree/main/packages/plugin-legacy#readme",
3434
"funding": "https://github.com/vitejs/vite?sponsor=1",
35+
"imports": {
36+
"#legacy-for-rolldown-vite": {
37+
"types": "./types/legacy-for-rolldown-vite.d.ts",
38+
"default": "./dist/vendor/rolldown-vite/index.js"
39+
}
40+
},
3541
"dependencies": {
3642
"@babel/core": "^7.28.0",
43+
"@babel/plugin-transform-dynamic-import": "^7.27.1",
44+
"@babel/plugin-transform-modules-systemjs": "^7.27.1",
3745
"@babel/preset-env": "^7.28.0",
3846
"babel-plugin-polyfill-corejs3": "^0.13.0",
3947
"babel-plugin-polyfill-regenerator": "^0.6.5",
@@ -49,7 +57,9 @@
4957
"vite": "^7.0.0"
5058
},
5159
"devDependencies": {
60+
"@vitejs/plugin-legacy-for-rolldown-vite": "https://pkg.pr.new/vitejs/rolldown-vite/@vitejs/plugin-legacy@b19b90a",
5261
"acorn": "^8.15.0",
62+
"fdir": "^6.4.6",
5363
"picocolors": "^1.1.1",
5464
"tsdown": "^0.12.9",
5565
"vite": "workspace:*"

packages/plugin-legacy/src/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import crypto from 'node:crypto'
33
import { createRequire } from 'node:module'
44
import { fileURLToPath } from 'node:url'
55
import { build, normalizePath } from 'vite'
6+
import * as vite from 'vite'
67
import MagicString from 'magic-string'
78
import type {
89
BuildOptions,
@@ -125,6 +126,13 @@ const nonLeadingHashInFileNameRE = /[^/]+\[hash(?::\d+)?\]/
125126
const prefixedHashInFileNameRE = /\W?\[hash(?::\d+)?\]/
126127

127128
function viteLegacyPlugin(options: Options = {}): Plugin[] {
129+
if ('rolldownVersion' in vite) {
130+
const { default: viteLegacyPluginForRolldownVite } = _require(
131+
'#legacy-for-rolldown-vite',
132+
)
133+
return viteLegacyPluginForRolldownVite(options)
134+
}
135+
128136
let config: ResolvedConfig
129137
let targets: Options['targets']
130138
let modernTargets: Options['modernTargets']
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,66 @@
1+
import path from 'node:path'
2+
import fs from 'node:fs'
13
import { defineConfig } from 'tsdown'
4+
import { fdir } from 'fdir'
5+
6+
const pluginLegacyForRolldownVitePackagePath = path.resolve(
7+
import.meta.dirname,
8+
'./node_modules/@vitejs/plugin-legacy-for-rolldown-vite',
9+
)
210

311
export default defineConfig({
412
entry: ['src/index.ts'],
513
target: 'node20',
614
tsconfig: false, // disable tsconfig `paths` when bundling
715
dts: true,
16+
hooks: {
17+
async 'build:done'() {
18+
validateAllDepsForRolldownViteIsIncluded()
19+
20+
const files = new fdir()
21+
.glob('!**/*.d.ts')
22+
.withRelativePaths()
23+
.crawl(path.join(pluginLegacyForRolldownVitePackagePath, 'dist'))
24+
.sync()
25+
for (const file of files) {
26+
const src = path.resolve(
27+
pluginLegacyForRolldownVitePackagePath,
28+
'dist',
29+
file,
30+
)
31+
const dist = path.resolve(
32+
import.meta.dirname,
33+
'dist/vendor/rolldown-vite',
34+
file,
35+
)
36+
fs.mkdirSync(path.dirname(dist), { recursive: true })
37+
fs.copyFileSync(src, dist)
38+
}
39+
},
40+
},
841
})
42+
43+
function validateAllDepsForRolldownViteIsIncluded() {
44+
const pkgJsonStr = fs.readFileSync(
45+
path.resolve(import.meta.dirname, 'package.json'),
46+
'utf-8',
47+
)
48+
const pkgJson = JSON.parse(pkgJsonStr)
49+
50+
const pkgJsonForRolldownViteStr = fs.readFileSync(
51+
path.resolve(pluginLegacyForRolldownVitePackagePath, 'package.json'),
52+
'utf-8',
53+
)
54+
const pkgJsonForRolldownVite = JSON.parse(pkgJsonForRolldownViteStr)
55+
56+
for (const depName of Object.keys(
57+
pkgJsonForRolldownVite.dependencies ?? {},
58+
)) {
59+
if (!pkgJson.dependencies[depName]) {
60+
throw new Error(
61+
`All deps for rolldown-vite version of @vitejs/plugin-legacy should be ` +
62+
`included in @vitejs/plugin-legacy, but ${depName} is not included.`,
63+
)
64+
}
65+
}
66+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import type { Plugin } from 'vite'
2+
import type { Options } from '../src/types'
3+
4+
declare const plugin: (options?: Options) => Plugin[]
5+
export default plugin

pnpm-lock.yaml

Lines changed: 44 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)