迫于同类的vite插件都不合意,自己撸了一个MPA插件

1,054 阅读2分钟

现在上班主要写的东西还是SPA或者SSR和SSG,但是冷不丁偶尔还会有MPA的需求,awesome-vite里面试了一圈同类的插件都不够符合自己的懒比习惯,或者表现和自己想的不一样,之前折腾过一个vite的svg转vue-component的插件,想着也不是很复杂,就着手自己写了一个。

一开始起名字就犯了大难,因为相关的名字基本就被用了个7788,想了半天憋了个名字出来,也算是契合用途:

vite-plugin-filesystem-multi-pages

vite 插件,用途和它的名字一样,是个简化 vite 的 MPA 配置的插件。

其实 vite 的 mpa 配置本来也不是很复杂,但是终究还是有不方便的地方,秉承着能懒掉就懒掉的原则,插件实现了以下几个功能:

  • 和 vite-plugin-pages 类似,可以指定一个目录,页面的配置按照目录的名称自动生成,dev 环境下 vite 默认需要通过例如 http://localhost:3000/src/pages/nested/index.html 这样的完整路径才能访问,插件内做了自动映射,只需访问 http://localhost:3000/nested 即可

  • 自动化 MPA 打包配置,无需再手动配置 rollup 的 input 选项

  • All-in-one template 模式, 只需少量设置就可以让所有页面使用同一个 html 模板,并且可以用 {{ xxx }} 的标识符配合插件的 replace 选项中定义的变量来替换 html 的内容

  • vite 默认的打包路径,如果目录在 src/pages 那么打包之后 dist 目录中也会是 dist/src/pages 这种结构,虽然 nginx 配一下也不是很麻烦,不过插件也提供了选项,可以定义类似 webpack 的 publicPath

详细的配置和使用说明见 github 的 readme

实际开发过程只用了三天,开发过程中遇到的主要问题是不太懂 rollup 打包过程的各个钩子函数是什么时机触发的能干什么,需要去 rollup 官网边看边写加上自己实验。好在写完了以后对这个插件的无脑程度还是挺满意的,就差亿点人用了。

发到掘金来球试试,觉得好用请务必赏一个star。