diff --git a/packages/shared/src/template.ts b/packages/shared/src/template.ts
index c333c6ada07..e731fc15710 100644
--- a/packages/shared/src/template.ts
+++ b/packages/shared/src/template.ts
@@ -209,7 +209,7 @@ export class BaseTemplate {
result[compName] = {
name: newComp?.name,
}
- } else {
+ } else {
result[compName] = newComp
}
}
@@ -227,7 +227,7 @@ export class BaseTemplate {
: this.dataKeymap('i:item,c:1')
const xs = this.supportXS
? (this.isSupportRecursive
- ? `xs.a(0, item.${Shortcuts.NodeName})`
+ ? `xs.a(0, item.${Shortcuts.NodeName})`
: `xs.a(0, item.${Shortcuts.NodeName}, '')`)
: "'tmpl_0_' + item.nn"
return `${this.buildXsTemplate()}
@@ -285,7 +285,7 @@ export class BaseTemplate {
const { isSupportRecursive, supportXS } = this
const isLastRecursiveComp = !isSupportRecursive && level + 1 === this.baseLevel
const isUseXs = !this.isSupportRecursive && this.supportXS
-
+
if (isLastRecursiveComp) {
const data = isUseXs
? `${this.dataKeymap('i:item,c:c,l:l')}`
@@ -309,19 +309,19 @@ export class BaseTemplate {
return supportXS
? ``
- : isSupportRecursive
+ : isSupportRecursive
? ``
: ``
}
-
+
}
private getChildren (comp: Component, level: number): string {
const { isSupportRecursive, Adapter } = this
const nextLevel = isSupportRecursive ? 0 : level + 1
-
+
let child = this.getChildrenTemplate(nextLevel)
-
+
if (isFunction(this.modifyLoopBody)) {
child = this.modifyLoopBody(child, comp.nodeName)
}
@@ -441,13 +441,17 @@ export class BaseTemplate {
child = this.modifyThirdPartyLoopBody(child, compName)
}
- template += `
-
- <${compName} ${this.buildThirdPartyAttr(attrs, this.thirdPartyPatcher[compName] || {})} id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">
+ const children = this.voidElements.has(compName)
+ ? ''
+ : `
${child}
- ${compName}>
+ `
+
+ template += `
+
+ <${compName} ${this.buildThirdPartyAttr(attrs, this.thirdPartyPatcher[compName] || {})} id="{{i.uid||i.sid}}" data-sid="{{i.sid}}">${children}${compName}>
`
}
@@ -671,7 +675,7 @@ export class UnRecursiveTemplate extends BaseTemplate {
const listA = Array.from(isLoopCompsSet).map(item => componentsAlias[item]?._num || item)
const listB = hasMaxComps.map(item => componentsAlias[item]?._num || item)
const containerLevel = this.baseLevel - 1
-
+
return `function (l, n, s) {
var a = ${JSON.stringify(listA)}
var b = ${JSON.stringify(listB)}
diff --git a/packages/taro-plugin-inject/package.json b/packages/taro-plugin-inject/package.json
index 09696e9b36a..e4d1e02592c 100644
--- a/packages/taro-plugin-inject/package.json
+++ b/packages/taro-plugin-inject/package.json
@@ -26,7 +26,8 @@
},
"dependencies": {
"@tarojs/service": "workspace:*",
- "@tarojs/shared": "workspace:*"
+ "@tarojs/shared": "workspace:*",
+ "@tarojs/helper": "workspace:*"
},
"devDependencies": {
"rollup": "^2.79.0",
diff --git a/packages/taro-plugin-inject/src/index.ts b/packages/taro-plugin-inject/src/index.ts
index b0ec7747340..f12f5ad70dd 100644
--- a/packages/taro-plugin-inject/src/index.ts
+++ b/packages/taro-plugin-inject/src/index.ts
@@ -1,4 +1,5 @@
+import { esbuild } from '@tarojs/helper'
import { isArray, isFunction, isObject, isString } from '@tarojs/shared'
import * as path from 'path'
@@ -41,7 +42,7 @@ export default (ctx: IPluginContext, options: IOptions) => {
const template = platform.template
if(!template) return
-
+
if (isArray(voidComponents)) {
voidComponents.forEach(el => template.voidElements.add(el))
} else if (isFunction(voidComponents)) {
@@ -89,10 +90,19 @@ function injectRuntimePath (platform: TaroPlatformBase) {
}
function injectComponentsReact (fs, taroComponentsPath, componentsMap) {
- fs.writeFileSync(path.resolve(__dirname, '../dist/components-react.js'), `
+ const filePath = path.resolve(__dirname, '../dist/components-react.js')
+ fs.writeFileSync(filePath, `
export * from '${taroComponentsPath}'
${Object.keys(componentsMap).map((key) => `export const ${key} = '${componentsMap[key]}'`).join('\n')}
`)
+ // 提前使用 esbuild 进行 bundle,避免 Webpack 分析过程中的错误,#13299 #14520
+ const result = esbuild.buildSync({
+ entryPoints: [filePath],
+ bundle: true,
+ write: false,
+ format: 'esm',
+ })
+ fs.writeFileSync(filePath, result.outputFiles[0].text)
}
function injectComponents (fs, components) {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1360d7d818b..7868a6c653d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1395,12 +1395,14 @@ importers:
packages/taro-plugin-inject:
specifiers:
+ '@tarojs/helper': workspace:*
'@tarojs/service': workspace:*
'@tarojs/shared': workspace:*
rollup: ^2.79.0
rollup-plugin-ts: ^3.0.2
typescript: ^4.7.4
dependencies:
+ '@tarojs/helper': link:../taro-helper
'@tarojs/service': link:../taro-service
'@tarojs/shared': link:../shared
devDependencies: