diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 000000000000..953c4f6ad3dd --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'body-max-line-length': [0, 'always', Infinity] + } +} diff --git a/package.json b/package.json index c7d1869246f3..1eecf027cdd8 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "husky": { "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS --config commitlint.config.js", "pre-commit": "lint-staged" } }, diff --git a/packages/taro-runtime/src/constants/index.ts b/packages/taro-runtime/src/constants/index.ts index 19e3dbac1688..fadf386f4291 100644 --- a/packages/taro-runtime/src/constants/index.ts +++ b/packages/taro-runtime/src/constants/index.ts @@ -37,3 +37,4 @@ export const DATE = 'Date' export const SET_TIMEOUT = 'setTimeout' export const CATCHMOVE = 'catchMove' export const CATCH_VIEW = 'catch-view' +export const COMMENT = 'comment' diff --git a/packages/taro-runtime/src/dom/document.ts b/packages/taro-runtime/src/dom/document.ts index 84eed532b576..47f70ba27fc4 100644 --- a/packages/taro-runtime/src/dom/document.ts +++ b/packages/taro-runtime/src/dom/document.ts @@ -7,7 +7,8 @@ import { eventSource } from '../dom/event-source' import { ElementNames, InstanceFactory, InstanceNamedFactory } from '../interface' import { ROOT_STR, - DOCUMENT_ELEMENT_NAME + DOCUMENT_ELEMENT_NAME, + COMMENT } from '../constants' import type { FormElement } from '../dom/form' @@ -71,6 +72,8 @@ export class TaroDocument extends TaroElement { // @TODO: @PERF: 在 hydrate 移除掉空的 node public createComment (): TaroText { - return this._getText('') + const textnode = this._getText('') + textnode.nodeName = COMMENT + return textnode } } diff --git a/packages/taro-runtime/src/dom/node.ts b/packages/taro-runtime/src/dom/node.ts index 484ea4fc744d..43dda8c3f062 100644 --- a/packages/taro-runtime/src/dom/node.ts +++ b/packages/taro-runtime/src/dom/node.ts @@ -2,7 +2,7 @@ import { inject, injectable } from 'inversify' import { Shortcuts, ensure } from '@tarojs/shared' import SERVICE_IDENTIFIER from '../constants/identifiers' import { NodeType } from './node_types' -import { incrementId } from '../utils' +import { incrementId, isComment } from '../utils' import { TaroEventTarget } from './event-target' import { hydrate } from '../hydrate' import { eventSource } from './event-source' @@ -75,7 +75,9 @@ export class TaroNode extends TaroEventTarget { const parentNode = this.parentNode if (parentNode) { - const indexOfNode = parentNode.findIndex(this) + // 计算路径时,先过滤掉 comment 节点 + const list = parentNode.childNodes.filter(node => !isComment(node)) + const indexOfNode = list.indexOf(this) const index = this.hooks.getPathIndex(indexOfNode) return `${parentNode._path}.${Shortcuts.Childnodes}.${index}` diff --git a/packages/taro-runtime/src/hydrate.ts b/packages/taro-runtime/src/hydrate.ts index 256b2231072a..8e420425e2d3 100644 --- a/packages/taro-runtime/src/hydrate.ts +++ b/packages/taro-runtime/src/hydrate.ts @@ -1,5 +1,5 @@ import { Shortcuts, toCamelCase } from '@tarojs/shared' -import { isText, isHasExtractProp } from './utils' +import { isText, isHasExtractProp, isComment } from './utils' import { SPECIAL_NODES, VIEW, @@ -35,7 +35,7 @@ export function hydrate (node: TaroElement | TaroText): MiniData { [Shortcuts.NodeName]: nodeName, uid: node.uid } - const { props, childNodes } = node + const { props } = node if (!node.isAnyEventBinded() && SPECIAL_NODES.indexOf(nodeName) > -1) { data[Shortcuts.NodeName] = `static-${nodeName}` @@ -60,6 +60,11 @@ export function hydrate (node: TaroElement | TaroText): MiniData { } } + let { childNodes } = node + + // 过滤 comment 节点 + childNodes = childNodes.filter(node => !isComment(node)) + if (childNodes.length > 0) { data[Shortcuts.Childnodes] = childNodes.map(hydrate) } else { diff --git a/packages/taro-runtime/src/utils/index.ts b/packages/taro-runtime/src/utils/index.ts index b1ad51f12a0f..42e998b28c41 100644 --- a/packages/taro-runtime/src/utils/index.ts +++ b/packages/taro-runtime/src/utils/index.ts @@ -5,7 +5,8 @@ import { STYLE, ID, UID, - CLASS + CLASS, + COMMENT } from '../constants' import type { TaroElement } from '../dom/element' @@ -25,6 +26,10 @@ export function isText (node: TaroNode): node is TaroText { return node.nodeType === NodeType.TEXT_NODE } +export function isComment (node: TaroNode): boolean { + return node.nodeName === COMMENT +} + export function isHasExtractProp (el: TaroElement): boolean { const res = Object.keys(el.props).find(prop => { return !(/^(class|style|id)$/.test(prop) || prop.startsWith('data-'))