diff --git a/packages/uni-cli-shared/src/vue/transforms/index.ts b/packages/uni-cli-shared/src/vue/transforms/index.ts index f0c67102fab48040780cfb5b09b9c3cda3efe803..4ea525f990d31a1e97fe41fd1a0fd6a5f4fe1671 100644 --- a/packages/uni-cli-shared/src/vue/transforms/index.ts +++ b/packages/uni-cli-shared/src/vue/transforms/index.ts @@ -33,7 +33,13 @@ export const transformMatchMedia = createTransformTag({ }) export const transformTapToClick = createTransformEvent({ - tap: 'click', + tap: (node) => { + // 地图组件有自己特定的 tap 事件 + if (node.tag === 'map' || node.tag === 'v-uni-map') { + return 'tap' + } + return 'click' + }, }) export const transformComponentLink = diff --git a/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts b/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts index c982b0c610a2aef31570479e00b8f6d0b24259ff..b6941bb76cae428dd09904b081643bef52b80d3f 100644 --- a/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts +++ b/packages/uni-cli-shared/src/vue/transforms/transformEvent.ts @@ -1,8 +1,12 @@ -import { DirectiveNode, NodeTransform } from '@vue/compiler-core' +import { DirectiveNode, ElementNode, NodeTransform } from '@vue/compiler-core' +import { isFunction } from '@vue/shared' import { isElementNode, isSimpleExpressionNode } from '../../vite/utils/ast' export function createTransformEvent( - options: Record + options: Record< + string, + string | ((node: ElementNode, dir: DirectiveNode) => string) + > ): NodeTransform { return function transformEvent(node) { if (!isElementNode(node)) { @@ -14,7 +18,11 @@ export function createTransformEvent( const eventType = options[arg.content] if (eventType) { // e.g tap => click - arg.content = eventType + if (isFunction(eventType)) { + arg.content = eventType(node, prop as DirectiveNode) + } else { + arg.content = eventType + } } } }) diff --git a/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts b/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts deleted file mode 100644 index 4f7249a3e604eb189b7f1c10977737ae3689753f..0000000000000000000000000000000000000000 --- a/packages/uni-h5-vite/__tests__/builtInComponents.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BindingTypes } from '@vue/compiler-core' -import { compileTemplate } from '@vue/compiler-sfc' -import { compilerOptions } from '../src/plugin/uni' -const filename = 'foo.vue' -describe('h5: compiler', () => { - test('builtInComponents', () => { - expect( - compileTemplate({ - source: ``, - filename, - id: filename, - compilerOptions: { - ...compilerOptions, - bindingMetadata: { - canvas: BindingTypes.SETUP_REF, - }, - }, - }).code - ).toContain(`_resolveComponent("v-uni-canvas")`) - }) -}) diff --git a/packages/uni-h5-vite/__tests__/compiler.spec.ts b/packages/uni-h5-vite/__tests__/compiler.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..d531fcaf891fdf8e902556abc61ea07e66338044 --- /dev/null +++ b/packages/uni-h5-vite/__tests__/compiler.spec.ts @@ -0,0 +1,29 @@ +import { BindingTypes } from '@vue/compiler-core' +import { compileTemplate } from '@vue/compiler-sfc' +import { compilerOptions } from '../src/plugin/uni' +const filename = 'foo.vue' + +function compile(source: string) { + return compileTemplate({ + source, + filename, + id: filename, + compilerOptions: { + ...compilerOptions, + bindingMetadata: { + canvas: BindingTypes.SETUP_REF, + }, + }, + }) +} +describe('h5: compiler', () => { + test('tap=>click', () => { + expect(compile('').code).toContain(`onClick`) + expect(compile('').code).toContain(`onTap`) + }) + test('builtInComponents', () => { + expect(compile('').code).toContain( + `_resolveComponent("v-uni-canvas")` + ) + }) +})