打包后,自动引入的组件被解析成组件名的html标签

打包后,自动引入的组件被解析成组件名的html标签

Brain老师好,我再按照这个视频打包后,打包成功了,但是 pnpm preview 之后,发现打包出来的 html,里面自动引入的比如 Menu 组件,没有解析成 Menu 组件里的 html 代码,而是被解析成了<menu></menu>标签,请问这个该如何解决呀?

https://img1.sycdn.imooc.com//climg/64bd1c1a09067bb924421536.jpg

https://img1.sycdn.imooc.com//climg/64bd1c1a09b4ebcd21141648.jpg

https://img1.sycdn.imooc.com//climg/64bd1c1a09fece3538402020.jpg


正在回答

登陆购买课程后可参与讨论,去登陆

5回答

https://github.com/antfu/unplugin-vue-components/blob/534fbfa6755facb98275a5460ed544f113273dd2/src/types.ts#L67


来看看这里和这里


https://www.npmjs.com/package/@rollup/pluginutils


https://img1.sycdn.imooc.com//climg/64bde0ac092b1ae619060752.jpg

这里有一段介绍:

https://img1.sycdn.imooc.com//climg/64bde12609ff211c21000744.jpg

以//?/<驱动器字母>开头的模式将不会将?视为通配符字符。相反,它将被视为普通字符串。


/\.vue\?vue/

这里应该为了匹配rollup中文件索引的策略而添加的:


你可以自己写一个插件,看看transform出来的vue组件,基本上是.vue?vue结尾:这个是setup语法,编译之后会变成这样:


https://img1.sycdn.imooc.com//climg/64bde63a0928834f30540598.jpg


这里是插件代码:

export default function myPlugin() {
    return {
        name: 'transform-file',
        
        transform(src, id) {
            if (src.indexOf('.vue') !== -1) {
                console.log('🚀 ~ file: index.ts:6 ~ transform ~ src:', src)
            }
            console.log('🚀 ~ file: index.ts:6 ~ transform ~ src:', id)
        }
    }
}


Brian 2023-07-24 00:27:12

可以把Components里的 include 属性设置成:


include: [/\.vue$/, /\.vue\?vue/, /\.md$/],


  • 提问者 慕莱坞7043791 #1

    嗯嗯,Brain 老师,按照这个配置,打包出来组件解析的没问题,但是这里的 .vue?vue 是啥意思呀,是去匹配类似app.vue?vue 文件,不太理解诶

    2023-07-24 09:30:02
  • Brian 回复 提问者 慕莱坞7043791 #2

    该正则表达式的作用是匹配文件名为.vue后缀且参数为?vue的文件,这个正则表达式常用于指定只处理以.vue结尾的特定文件,以及在这些文件中添加?vue参数,通常用于类似Vue的单文件组件(SFC)的构建和处理。

    2023-07-24 10:09:56
提问者 慕莱坞7043791 2023-07-23 21:26:13
但不知道去掉去掉include有没有其他问题,老师能否解答一下呀
提问者 慕莱坞7043791 2023-07-23 21:08:30

解决了,需要把Components里的 include 属性去掉,才能够正常解析组件标签

Components({

     directoryAsNamespace: true,

     collapseSamePrefixes: true,

     include: [/\.vue$/, /\.md$/]

   }),

改成

Components({

     directoryAsNamespace: true,

     collapseSamePrefixes: true

   }),


提问者 慕莱坞7043791 2023-07-23 20:45:40

https://img1.sycdn.imooc.com//climg/64bd20e1096fb41211401936.jpg

https://img1.sycdn.imooc.com//climg/64bd20e10901c02b08361908.jpg

附带一下 vite.config.ts 和 package.json 的信息

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端高级工程师(大前端)
  • 参与学习       297    人
  • 解答问题       366    个

全新打造“技术成长&职业破局”双高体系,深度打通“全栈 + 全流程 +多端+ 提效+AI赋能”,递进式锤炼思维与高阶技能,高效实现能力跃迁,助力成为“驾驭全局,深广兼备,打通多端全栈”的高级工程师

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师