From e35e4cd157540d0fc0d91c57562e161eefe80645 Mon Sep 17 00:00:00 2001 From: PeachScript Date: Sun, 23 Jul 2023 20:26:31 +0800 Subject: [PATCH] refactor: improve logic to set react jsx type --- src/builder/utils.ts | 53 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/builder/utils.ts b/src/builder/utils.ts index b80863ee..b8163084 100644 --- a/src/builder/utils.ts +++ b/src/builder/utils.ts @@ -19,40 +19,39 @@ export function addSourceMappingUrl(code: string, loc: string) { } export function getBaseTransformReactOpts(pkg: IApi['pkg'], cwd: string) { + let isNewJSX: boolean; + let opts: Record = {}; const reactVer = Object.assign( {}, pkg.dependencies, pkg.peerDependencies, ).react; - let opts: Record = {}; - - if (reactVer) { - let isNewJSX: boolean; - const tsconfig = getTsconfig(cwd); - - /* istanbul ignore else -- @preserve */ - if (tsconfig?.options?.jsx !== undefined) { - // respect tsconfig first, `4` means `react-jsx` - isNewJSX = tsconfig.options?.jsx === 4; - } else { - // fallback to match react versions which support new JSX transform - // ref: https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#how-to-upgrade-to-the-new-jsx-transform - isNewJSX = semver.subset( - reactVer, - '>=17.0.0-0||^16.14.0||^15.7.0||^0.14.10', - ); - } - - opts = { - // force use production mode, to make sure dist of dev/build are consistent - // ref: https://github.com/umijs/umi/blob/6f63435d42f8ef7110f73dcf33809e6cda750332/packages/babel-preset-umi/src/index.ts#L45 - development: false, - // set jsx runtime automatically - runtime: isNewJSX ? 'automatic' : 'classic', - ...(isNewJSX ? {} : { importSource: undefined }), - }; + const tsconfig = getTsconfig(cwd); + + /* istanbul ignore else -- @preserve */ + if (tsconfig?.options?.jsx !== undefined) { + // respect tsconfig first, `4` means `react-jsx` + isNewJSX = tsconfig.options?.jsx === 4; + } else if (reactVer) { + // fallback to match react versions which support new JSX transform + // ref: https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#how-to-upgrade-to-the-new-jsx-transform + isNewJSX = semver.subset( + reactVer, + '>=17.0.0-0||^16.14.0||^15.7.0||^0.14.10', + ); + } else { + return false; } + opts = { + // force use production mode, to make sure dist of dev/build are consistent + // ref: https://github.com/umijs/umi/blob/6f63435d42f8ef7110f73dcf33809e6cda750332/packages/babel-preset-umi/src/index.ts#L45 + development: false, + // set jsx runtime automatically + runtime: isNewJSX ? 'automatic' : 'classic', + ...(isNewJSX ? {} : { importSource: undefined }), + }; + return opts; }