Vite+Vue3 React Seo预渲染插件
原理
预渲染原理基本上都是启动无头浏览器,加载页面路由并将结果保存为静态HTML文件,存在很多优点。
如果你还在翻遍百度查找关于vite+vue3和react的预渲染,看这篇就够了。写一个完全符合自己需求的预渲染插件。
1.在项目安装无头浏览器,npm add puppeteer --dev
2.新建插件文件如./prerender.js,内容为:
import puppeteer from 'puppeteer'
import fs from "fs"
/**
@param routes 预渲染路由地址
*/
const seoPrerender = (routes) => {
return {
name: "viteSeoPrerender",
async closeBundle() {
// 预渲染逻辑放这里,即打包完成后执行预渲染
// 复制puppeteer官方示例
const browser = await puppeteer.launch()
const page = await browser.newPage()
for (const key in routes) {
// 遍历需渲染的路由
// 这里先简单化把url固定,可通过先启动vite preview的方式取得访问地址和端口
await page.goto("http://127.0.0.1:4173" + key)
await page.setViewport({width: 1024, height: 768})
const content = await page.content()
const filePath = `./dist${key}/index.html` // 保存的html文件路径
fs.writeFileSync(filePath, content)
}
await browser.close()
}
}
}
export default seoPrerender
3.vite.config配置 plugins 项:
import {defineConfig} from 'vite'
import seoPrerender from './prerender'
export default defineConfig({
plugins: [
seoPrerender({
routes: ['/','/about','/contact']
})
]
})
只需要puppeteer示例下加上遍历所需路由地址,然后fs保存为html即可完成一个简单的预渲染,适合所有框架,非vite框架也需稍微改动下即可