vite:记录如何手写一个plugins插件

昨天看了一篇文章 【Vite 实战:手把手教你写一个 Vite 插件】,讲的是开发了一个编译markdown文件,解析为html的插件,看完之后自己记录一下啦,了解一下开发一个vite插件的书写格式。

以下的示例放在github上,可以克隆下来自己跑跑试试呀。github地址 : vitejs-plugin-markdown 

首先咱用vite先创建一个项目吧,执行【npm create vite@latest my-vue-app --template vue-ts】,这样我们就得到了一个vue+vite+ts项目。

我今天记录的也是编译markdown的示例,所以咱在项目里写一个demo.md文件,然后我们在App.vue文件里引入这个md文件,然后【npm run dev】项目启动看看。

 

ok,【g-markdown】没有解析,正常正常。环境已经都创建好了,下面我们开始着手搞组件了,解析这个标签,读取md文件。

1. 先搞一个插件的壳子格式,

2. 研究一下transform中各参数是啥

code:文件的源码字符串

id:文件的路径path

opt:{ssr:boolean} 

     

 ok,我们主要用到的就是code和id,也就是源码和文件,我们做一个粗糙的版本,只限制vue文件,判断id是以【.vue】结尾的,然后我就处理。

      

懂了懂了!!!这个方法返回的啥源码字符串,最后页面渲染的就是以这个为newSourceCode然后进行vue解析编译,渲染。

 

那咱这个markdown插件,核心就是在code中匹配到【<g-markdown file="./demo.md"></g-markdown>】,并获取这个file,然后借助node的path,获取md文件的字符串,再借助一个【markdown-it】这个第三方插件,将md转为html,最后来个字符串替换,然后return就好啦!

 

3. 完善transform,实现逻辑

3.1 匹配到 【g-markdown】这个标签,并读取到它的file属性,然后根据path、fs,读取到md文件的字符串

  

 

 

3.2 借助【markdown-it】,将md字符串转为html字符串

上面我们可以看到,我们已经获得了md字符串,但是浏览器是看不懂md的专属语法,所以需要借助第三方工具,编译一下。

 

 

 

3.3 字符串替换

将获取到的html,替换掉我们写的g-markdown标签。

 

 

4. 配置热重载

上面渲染ok了,但发现一个问题,md文件更改了,浏览器展示的内容没有更新,每次都需要重新启动。

我们需要在插件的 handleHotUpdate 钩子函数中,对我们的 md 类型文件进行监听,再将引用了该 md 文件的 vue 文件进行热重载。

  

 

 

 好啦,到这里的话一个vite插件就结束啦,希望对大家有所帮助。

如果觉得本文对您有帮助,请帮忙在 github 上点亮 star 鼓励一下吧!

 

posted @ 2023-02-23 17:37  蛙仔  阅读(668)  评论(0编辑  收藏  举报