写了个 vite 插件,提醒起 vue 组件名小助手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
shakukansp
V2EX    分享创造

写了个 vite 插件,提醒起 vue 组件名小助手

  •  
  • /div>   shakukansp 2023-07-28 13:46:57 +08:00 1988 次点击
    这是一个创建于 805 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/MinatoHikari/vite-plugin-vue-component-name-checker

    给公司新项目搭完 vue3 架子后扔给同事开发,用 vite-plugin-pages 的时候,keep-aliveincludes 需要塞组件名进去,同事总忘记复制粘贴以后总忘记改组件名,要么就是忘记写,提醒一万遍,忍无可忍,遂写此插件。

    默认的行为是把定义的 dir 参数当作根目录,只要开发或者打包的时候读取了 .vuemodule,就会检索文件内代码是否写在 defineOptions 里写了正确组件名(默认按照路由层级+文件名来对比是否正确,配合vite-plugin-pages 生成的 routes 可以很简单地进行 keep-alive 的设定) 目前只检测 script setup

    支持配置需要忽略的文件路径字符串,支持自定义比较规则

    比如设置 dirpath.join(__dirname, 'src', 'pages') 那么假如文件路径为 src/pages/auth/login/index.vue 或者 src/pages/auth/login.vue

    在进去这个页面的时候插件就会检查 vue 文件内的代码,是不是定义了 defineOptions({name:'AuthLogin'}), 或者 <script setup name="AuthLogin"></script>

    如果文件名不是 AuthLogin 就会在终端报错,显示写错的文件名和正确的文件名,并且可以 ctrl 或 cmd + 点击直接跳转到出错的那行代码方便修正文件名

    13 条回复    2023-07-29 16:42:08 +08:00
    feifeichen
        1
    feifeichen  
       2023-07-28 13:57:28 +08:00
    既然这样不如直接强制文件名和组件名一致,还免得手动改了
    shakukansp
        2
    shakukansp  
    OP
       2023-07-28 14:00:33 +08:00
    @feifeichen 那你没法包装唯一性,按目录层级起名组件名必然是唯一的
    shakukansp
        3
    shakukansp  
    OP
       2023-07-28 14:18:00 +08:00
    @feifeichen 另外,vite-plugin-pages 是根据目录层级生成 route, 多标签页缓存可以很简单地用 route.path 当作 key ,组只要简单处理就可以转换成组件名加到 keep-alive 的 includes 里面。
    而且我们项目是可以通过组件名直接 decamelcase 来在浏览器里显示的导航菜单中精确搜索页面的,避免 ide 或者编辑器中的文件目录层级和导航菜单中的层级中英文对不上而找不到目录到底对应的是菜单中哪个页面的问题
    Kurisuzz
        4
    Kurisuzz  
       2023-07-28 14:31:26 +08:00
    点赞,本人也经常忘了写组件名
    toesbieya
        5
    toesbieya  
       2023-07-28 14:45:18 +08:00
    又是经典的动态路由,吐了
    SleepyRaven
        6
    SleepyRaven  
       2023-07-28 14:49:21 +08:00
    vue3 现在有没有定义组件 name 的 api 啊?之前有个提案一直没被 merge
    shakukansp
        7
    shakukansp  
    OP
       2023-07-28 15:38:10 +08:00
    @SleepyRaven 3.3.4 defineOptions 已经成为正式 api
    Yukiteru
        8
    Yukiteru  
       2023-07-28 15:41:28 +08:00
    我给 vscode 写了个模板,生成 vue 文件的时候自动根据文件名填写组件名,算是比较方便的做法
    shakukansp
        9
    shakukansp  
    OP
       2023-07-28 15:43:09 +08:00
    @toesbieya vite-plugin-pages 是根据你的目录层级生成路由,filesystem 路由,是不怎么需要去关心路由文件的
    shakukansp
        10
    shakukansp  
    OP
       2023-07-28 15:48:40 +08:00
    @Yukiteru 写过脚本递归根据目录层级+文件名命名组件

    后续考虑加类似的东西可以在终端里点一下就改正组件名
    lsdsjy
        11
    lsdsjy  
       2023-07-28 17:38:11 +08:00
    感觉应该是 linter 而不是 vite 该干的事
    shakukansp
        12
    shakukansp  
    OP
       2023-07-28 18:18:29 +08:00
    @lsdsjy 好像也可以,没有这么灵活
    NICE20991231
        13
    NICE20991231  
       2023-07-29 16:42:08 +08:00
    有趣,我是检测到 setup 直接生成自动组件名(追加一个普通的 script ),注册路由时也直接获取组件的 name
    只针对 pages 目录...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 13:39 PVG 21:39 LAX 06:39 JFK 09:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86