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

2023-07-28 13:46:57 +08:00
 shakukansp

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 + 点击直接跳转到出错的那行代码方便修正文件名

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

后续考虑加类似的东西可以在终端里点一下就改正组件名
lsdsjy
2023-07-28 17:38:11 +08:00
感觉应该是 linter 而不是 vite 该干的事
shakukansp
2023-07-28 18:18:29 +08:00
@lsdsjy 好像也可以,没有这么灵活
NICE20991231
2023-07-29 16:42:08 +08:00
有趣,我是检测到 setup 直接生成自动组件名(追加一个普通的 script ),注册路由时也直接获取组件的 name
只针对 pages 目录...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX