diff --git a/packages/uni-h5-vite/src/plugin/index.ts b/packages/uni-h5-vite/src/plugin/index.ts index 949d21c0b2619593c09b2d25bcc2e4cac531b28b..7140064911bb83044e0a1c36f6f16a9395760de2 100644 --- a/packages/uni-h5-vite/src/plugin/index.ts +++ b/packages/uni-h5-vite/src/plugin/index.ts @@ -6,6 +6,7 @@ import { createHandleHotUpdate } from './handleHotUpdate' import { createTransformIndexHtml } from './transformIndexHtml' import { createConfigureServer } from './configureServer' import { createUni } from './uni' +import { rewriteCompileScriptOnce } from './polyfill' import { createConfig } from './config' import { isString } from '@vue/shared' @@ -17,6 +18,9 @@ export function uniH5Plugin(): UniVitePlugin { resolvedConfig: null, } rewriteReadFileSync() + if (process.env.UNI_APP_X === 'true') { + rewriteCompileScriptOnce() + } return { name: 'uni:h5', uni: createUni(), diff --git a/packages/uni-h5-vite/src/plugin/polyfill.ts b/packages/uni-h5-vite/src/plugin/polyfill.ts new file mode 100644 index 0000000000000000000000000000000000000000..717585eb759dc57c016e9b97d5f056bc733630bf --- /dev/null +++ b/packages/uni-h5-vite/src/plugin/polyfill.ts @@ -0,0 +1,29 @@ +import { once } from '@dcloudio/uni-shared' +import { resolveBuiltIn } from '@dcloudio/uni-cli-shared' +import { + SFCDescriptor, + SFCScriptBlock, + SFCScriptCompileOptions, +} from '@vue/compiler-sfc' + +export const rewriteCompileScriptOnce = once(rewriteCompileScript) + +function rewriteCompileScript() { + const compiler = require(resolveBuiltIn('@vue/compiler-sfc')) + const { compileScript } = compiler + // script-setup + v-bind + compiler.compileScript = ( + sfc: SFCDescriptor, + options: SFCScriptCompileOptions + ): SFCScriptBlock => { + const originalScriptSetupLang = sfc.scriptSetup?.lang + if (originalScriptSetupLang === 'uts') { + sfc.scriptSetup!.lang = 'ts' + } + const result = compileScript(sfc, options) + if (originalScriptSetupLang === 'uts') { + sfc.scriptSetup!.lang = 'uts' + } + return result + } +}