0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00

Expose Babel config for @astro/react. (#10675)

This commit is contained in:
fightingcat 2024-04-05 01:57:20 +08:00 committed by GitHub
parent e2a780a46d
commit 14f1d49a10
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 3 deletions

View file

@ -0,0 +1,5 @@
---
"@astrojs/react": minor
---
Expose Babel config for @astro/react.

View file

@ -3,7 +3,7 @@ import type { AstroIntegration } from 'astro';
import { version as ReactVersion } from 'react-dom';
import type * as vite from 'vite';
export type ReactIntegrationOptions = Pick<ViteReactPluginOptions, 'include' | 'exclude'> & {
export type ReactIntegrationOptions = Pick<ViteReactPluginOptions, 'include' | 'exclude' | 'babel'> & {
experimentalReactChildren?: boolean;
};
@ -46,6 +46,7 @@ function optionsPlugin(experimentalReactChildren: boolean): vite.Plugin {
function getViteConfiguration({
include,
exclude,
babel,
experimentalReactChildren,
}: ReactIntegrationOptions = {}) {
return {
@ -65,7 +66,7 @@ function getViteConfiguration({
: '@astrojs/react/server-v17.js',
],
},
plugins: [react({ include, exclude }), optionsPlugin(!!experimentalReactChildren)],
plugins: [react({ include, exclude, babel }), optionsPlugin(!!experimentalReactChildren)],
resolve: {
dedupe: ['react', 'react-dom', 'react-dom/server'],
},
@ -89,6 +90,7 @@ function getViteConfiguration({
export default function ({
include,
exclude,
babel,
experimentalReactChildren,
}: ReactIntegrationOptions = {}): AstroIntegration {
return {
@ -97,7 +99,7 @@ export default function ({
'astro:config:setup': ({ command, addRenderer, updateConfig, injectScript }) => {
addRenderer(getRenderer());
updateConfig({
vite: getViteConfiguration({ include, exclude, experimentalReactChildren }),
vite: getViteConfiguration({ include, exclude, babel, experimentalReactChildren }),
});
if (command === 'dev') {
const preamble = FAST_REFRESH_PREAMBLE.replace(`__BASE__`, '/');