V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
shakukansp
V2EX  ›  分享创造

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

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

    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   ·   实用小工具   ·   1666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 16:43 · PVG 00:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.