From f390179077fbaa6192995eb45df8b41dfe53a5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BA=9A=E7=90=AA?= Date: Wed, 10 Nov 2021 12:09:02 +0800 Subject: [PATCH] feat: page-meta-head --- .../src/vue/transforms/transformPageHead.ts | 4 ++-- .../lib/page-meta-head/page-meta-head.vue | 2 +- packages/uni-h5-vite/lib/ssr/entry-server.js | 4 ++-- packages/uni-h5-vite/src/plugin/index.ts | 7 ++++++- .../src/plugin/transforms/transformPageHead.ts | 10 ++++++++++ packages/uni-shared/src/tags.ts | 6 +++++- 6 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 packages/uni-h5-vite/src/plugin/transforms/transformPageHead.ts diff --git a/packages/uni-cli-shared/src/vue/transforms/transformPageHead.ts b/packages/uni-cli-shared/src/vue/transforms/transformPageHead.ts index c5702e27b..5903c8f31 100644 --- a/packages/uni-cli-shared/src/vue/transforms/transformPageHead.ts +++ b/packages/uni-cli-shared/src/vue/transforms/transformPageHead.ts @@ -2,8 +2,8 @@ import { NodeTransform } from '@vue/compiler-core' import { checkElementNodeTag } from '../../utils' export const transformPageHead: NodeTransform = (node, context) => { - // 发现是page-meta下的page-meta-head,直接remove该节点 - checkElementNodeTag(node, 'page-meta-head') && + // 发现是page-meta下的head,直接remove该节点 + checkElementNodeTag(node, 'head') && checkElementNodeTag(context.parent, 'page-meta') && context.removeNode(node) } diff --git a/packages/uni-components/lib/page-meta-head/page-meta-head.vue b/packages/uni-components/lib/page-meta-head/page-meta-head.vue index 197b7b32e..f5f3a6933 100644 --- a/packages/uni-components/lib/page-meta-head/page-meta-head.vue +++ b/packages/uni-components/lib/page-meta-head/page-meta-head.vue @@ -1,5 +1,5 @@ diff --git a/packages/uni-h5-vite/lib/ssr/entry-server.js b/packages/uni-h5-vite/lib/ssr/entry-server.js index f9f559030..1868a9040 100644 --- a/packages/uni-h5-vite/lib/ssr/entry-server.js +++ b/packages/uni-h5-vite/lib/ssr/entry-server.js @@ -84,10 +84,10 @@ function renderAppContext(ctx) { } function renderHeadMeta(ctx) { - if (!ctx.__teleportBuffers || !ctx.__teleportBuffers.__head__) { + if (!ctx.__teleportBuffers || !ctx.__teleportBuffers.head) { return '' } - return ctx.__teleportBuffers.__head__ + return ctx.__teleportBuffers.head .map((buffer) => buffer.toString()) .join('\n') } diff --git a/packages/uni-h5-vite/src/plugin/index.ts b/packages/uni-h5-vite/src/plugin/index.ts index 224d068f5..a166a62a0 100644 --- a/packages/uni-h5-vite/src/plugin/index.ts +++ b/packages/uni-h5-vite/src/plugin/index.ts @@ -10,6 +10,7 @@ import { } from '@dcloudio/uni-cli-shared' import { createHandleHotUpdate } from './handleHotUpdate' import { createTransformIndexHtml } from './transformIndexHtml' +import { transformPageHead } from './transforms/transformPageHead' import { createDefine } from '../utils/features' import { isSsr } from '../utils' import { esbuildPrePlugin } from './esbuild/esbuildPrePlugin' @@ -25,7 +26,11 @@ export const UniH5Plugin: UniVitePlugin = { compilerOptions: { isNativeTag: isH5NativeTag, isCustomElement: isH5CustomElement, - nodeTransforms: [transformTapToClick, transformMatchMedia], + nodeTransforms: [ + transformTapToClick, + transformMatchMedia, + transformPageHead, + ], }, }, config(config, env) { diff --git a/packages/uni-h5-vite/src/plugin/transforms/transformPageHead.ts b/packages/uni-h5-vite/src/plugin/transforms/transformPageHead.ts new file mode 100644 index 000000000..486e14215 --- /dev/null +++ b/packages/uni-h5-vite/src/plugin/transforms/transformPageHead.ts @@ -0,0 +1,10 @@ +import { NodeTransform, ElementNode, ElementTypes } from '@vue/compiler-core' +import { checkElementNodeTag } from '@dcloudio/uni-cli-shared' + +export const transformPageHead: NodeTransform = (node, context) => { + // 发现是page-meta下的head,替换为page-meta-head + checkElementNodeTag(node, 'head') && + checkElementNodeTag(context.parent, 'page-meta') && + (((node as ElementNode).tag = 'page-meta-head'), + ((node as ElementNode).tagType = ElementTypes.COMPONENT)) +} diff --git a/packages/uni-shared/src/tags.ts b/packages/uni-shared/src/tags.ts index 8b324dfd8..583b88c7a 100644 --- a/packages/uni-shared/src/tags.ts +++ b/packages/uni-shared/src/tags.ts @@ -76,7 +76,11 @@ export function isH5CustomElement(tag: string) { } export function isH5NativeTag(tag: string) { - return (isHTMLTag(tag) || isSVGTag(tag)) && !isBuiltInComponent(tag) + return ( + tag !== 'head' && + (isHTMLTag(tag) || isSVGTag(tag)) && + !isBuiltInComponent(tag) + ) } export function isNativeTag(tag: string) { -- GitLab