依赖及环境:
- vue3 + ts
- vite: 4.1.0
- @vitejs/plugin-vue: 4.0.0
报错:[plugin:vite:import-analysis] Failed to parse source for import analysis because the content contains invalid JS syntax. If you are using JSX, make sure to name the file with the .jsx or .tsx extension.
代码:
BsSubMenu.tsx
let createDropdownTransition = () => {
return (<Teleport to="body" disabled={!this.submenuTeleported}>
<BsDropdownTransition
placement={this.dropdownTransitionPlacement}
reference-ref={this.bsSubmenuTitleRef}
try-all-placement={false}
set-width={this.menuRootProps.mode == 'horizontal'}
set-min-width={false}
will-visible={this.submenuWillVisible}
// @ts-ignore
onAfterEnter={ () => this.$emit('expand', this.comId) }>
<ul
v-show={this.submenuVisible}
id={this.comId + '--content'}
data-submenu-path={this.submenuPath}
class={['bs-submenu-content', 'bs-submenu-content-dropdown', this.dropdownClass]}>
{ slots.default && slots.default() }
</ul>
</BsDropdownTransition>
</Teleport>);
};
BsMenuItem.tsx
let content = (<li
class={['bs-menu-item', {
'has-icon': !!$slots.icon,
'is-disabled': this.disabled,
'is-selected': this.isSelected
}]}
style={{
paddingLeft: this.paddingLeft.value ? (this.paddingLeft.value + this.paddingLeft.unit) : ''
}}
role="menuitem"
aria-level={this.keyIndexPath.length}
aria-disabled={this.disabled}
onClick={ this.handleClick }
onMouseenter={ this.handleMouseenter }>
{ $slots.icon ? <span
class="bs-menu-item-icon"
role="img">
{ $slots.icon ? $slots.icon() : null }
</span> : null }
<span class="bs-menu-item-title">
{ $slots.default ? $slots.default() : this.title }
</span>
{ $slots.content ? $slots.content() : null }
</li>);
请问以上2段tsx代码哪里的语法不对?在vite
环境下就报错,在webpack
环境是可以运行的
问题已解决,原因是未使用
@vitejs/plugin-vue-jsx
插件。解决办法:
@vitejs/plugin-vue-jsx
插件在
vite.config.js
中使用插件