diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 013b70b73..c395dddec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node_version: [18, 20, 22, 24] + node_version: [20, 22, 24] include: # Active LTS + other OS - os: macos-latest @@ -81,9 +81,6 @@ jobs: # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved run: pnpm playwright install chromium - - if: matrix.node_version == '18' - run: pnpm i -D vite@6.3.5 -w - - name: Build run: pnpm run build diff --git a/package.json b/package.json index b51a42923..a78df8171 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" }, "packageManager": "pnpm@10.13.1", "homepage": "https://github.com/vitejs/vite-plugin-react/", diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 48c74c811..f10da0efa 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 0.3.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 5b2f5b1af..693366005 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -20,7 +20,6 @@ "dist" ], "type": "module", - "types": "./dist/index.d.ts", "exports": "./dist/index.js", "scripts": { "dev": "tsdown --watch", @@ -28,7 +27,7 @@ "prepublishOnly": "npm run build" }, "engines": { - "node": ">=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "repository": { "type": "git", diff --git a/packages/plugin-react-oxc/tsconfig.json b/packages/plugin-react-oxc/tsconfig.json index 1d2f67860..70c7eacff 100644 --- a/packages/plugin-react-oxc/tsconfig.json +++ b/packages/plugin-react-oxc/tsconfig.json @@ -2,8 +2,8 @@ "include": ["src"], "compilerOptions": { "outDir": "dist", - "target": "ES2020", - "module": "ES2020", + "target": "es2023", + "module": "preserve", "moduleResolution": "bundler", "strict": true, "declaration": true, diff --git a/packages/plugin-react-oxc/tsdown.config.ts b/packages/plugin-react-oxc/tsdown.config.ts index 1f9c7eb25..3e38aa5d7 100644 --- a/packages/plugin-react-oxc/tsdown.config.ts +++ b/packages/plugin-react-oxc/tsdown.config.ts @@ -2,6 +2,7 @@ import { defineConfig } from 'tsdown' export default defineConfig({ entry: 'src/index.ts', + dts: true, copy: [ { from: 'node_modules/@vitejs/react-common/refresh-runtime.js', diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 7898a2524..629e79cfd 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 3.11.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 255673c77..1cc53b2b0 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -19,6 +19,9 @@ "build": "tsdown", "test": "playwright test" }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, "repository": { "type": "git", "url": "git+https://github.com/vitejs/vite-plugin-react.git", diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 49d34920d..432f8fbeb 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -292,3 +292,12 @@ const transformWithOptions = async ( } export default react + +// Compat for require +function pluginForCjs(this: unknown, options: Options): Plugin[] { + return react.call(this, options) +} +Object.assign(pluginForCjs, { + default: pluginForCjs, +}) +export { pluginForCjs as 'module.exports' } diff --git a/packages/plugin-react-swc/tsdown.config.ts b/packages/plugin-react-swc/tsdown.config.ts index 8220e365c..dea2c33a0 100644 --- a/packages/plugin-react-swc/tsdown.config.ts +++ b/packages/plugin-react-swc/tsdown.config.ts @@ -4,7 +4,6 @@ import packageJSON from './package.json' with { type: 'json' } export default defineConfig({ entry: 'src/index.ts', - format: ['esm', 'cjs'], dts: true, tsconfig: './tsconfig.src.json', // https://github.com/sxzz/rolldown-plugin-dts/issues/55 copy: [ @@ -21,18 +20,6 @@ export default defineConfig({ to: 'dist/README.md', }, ], - outputOptions(outputOpts, format) { - if (format === 'cjs') { - outputOpts.footer = (chunk) => { - // don't append to dts files - if (chunk.fileName.endsWith('.cjs')) { - return 'module.exports.default = module.exports' - } - return '' - } - } - return outputOpts - }, onSuccess() { writeFileSync( 'dist/package.json', @@ -46,15 +33,7 @@ export default defineConfig({ key !== 'private', ), ), - main: 'index.cjs', - types: 'index.d.ts', - module: 'index.js', - exports: { - '.': { - require: './index.cjs', - import: './index.js', - }, - }, + exports: './index.js', }, null, 2, diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 4c764e635..63f84fbdf 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 4.7.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 7ff59d14e..35b50c43e 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -20,15 +20,7 @@ "dist" ], "type": "module", - "main": "./dist/index.cjs", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" - } - }, + "exports": "./dist/index.js", "scripts": { "dev": "tsdown --watch", "build": "tsdown", @@ -36,7 +28,7 @@ "test-unit": "vitest run" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" }, "repository": { "type": "git", diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index f8dd135a4..4f4a0cead 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -404,6 +404,15 @@ export default function viteReact(opts: Options = {}): Plugin[] { viteReact.preambleCode = preambleCode +// Compat for require +function viteReactForCjs(this: unknown, options: Options): Plugin[] { + return viteReact.call(this, options) +} +Object.assign(viteReactForCjs, { + default: viteReactForCjs, +}) +export { viteReactForCjs as 'module.exports' } + function canSkipBabel( plugins: ReactBabelOptions['plugins'], babelOptions: ReactBabelOptions, diff --git a/packages/plugin-react/tsconfig.json b/packages/plugin-react/tsconfig.json index 1d2f67860..70c7eacff 100644 --- a/packages/plugin-react/tsconfig.json +++ b/packages/plugin-react/tsconfig.json @@ -2,8 +2,8 @@ "include": ["src"], "compilerOptions": { "outDir": "dist", - "target": "ES2020", - "module": "ES2020", + "target": "es2023", + "module": "preserve", "moduleResolution": "bundler", "strict": true, "declaration": true, diff --git a/packages/plugin-react/tsdown.config.ts b/packages/plugin-react/tsdown.config.ts index f816d7ae2..3e38aa5d7 100644 --- a/packages/plugin-react/tsdown.config.ts +++ b/packages/plugin-react/tsdown.config.ts @@ -2,23 +2,11 @@ import { defineConfig } from 'tsdown' export default defineConfig({ entry: 'src/index.ts', - format: ['esm', 'cjs'], + dts: true, copy: [ { from: 'node_modules/@vitejs/react-common/refresh-runtime.js', to: 'dist/refresh-runtime.js', }, ], - outputOptions(outputOpts, format) { - if (format === 'cjs') { - outputOpts.footer = (chunk) => { - // don't append to dts files - if (chunk.fileName.endsWith('.cjs')) { - return 'module.exports.default = module.exports' - } - return '' - } - } - return outputOpts - }, }) diff --git a/playground/tsconfig.json b/playground/tsconfig.json index b33cf555e..d6e393de0 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -2,14 +2,14 @@ "include": ["*.ts", "**/__tests__/*.ts", "**/vite.config.ts"], "exclude": ["**/dist/**"], "compilerOptions": { - "target": "ES2020", - "module": "ESNext", + "target": "ES2023", + "module": "preserve", "outDir": "dist", "baseUrl": ".", "allowJs": true, "esModuleInterop": true, "resolveJsonModule": true, - "moduleResolution": "Node", + "moduleResolution": "bundler", "skipLibCheck": true, "noEmit": true, "noUnusedLocals": true,