vue3预渲染使用方式,prerender-spa-plugin插件预渲染失败导致原因

"vue": "^3.2.33" + webpack + "prerender-spa-plugin": "^3.4.0"
 
vue.config.js配置
// 预渲染配置
const path = require('path');
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;

if (process.env.VUE_APP_ENV !== 'dev') {
  module.exports.configureWebpack.plugins = (
    module.exports.configureWebpack.plugins || []
  ).concat([
    new PrerenderSPAPlugin({
      staticDir: path.join(__dirname, 'dist'),
      routes: ['/home', '/productCoffee', '/productFruit'],   // 不能有'',  '/'

      renderer: new Renderer({
        // renderAfterDocumentEvent: 'custom-render-trigger',
        // injectProperty: "__PRERENDER_INJECTED",
        inject: {
          // prerendered: true
        },
        headless: false,
        ignoreHTTPSErrors: true,
        maxConcurrentRoutes: 3,

        //当页面多的时候尽量给的大点,这是留给做预渲染打包的时间,不然很容易超时而报错
        renderAfterTime: 5000
      })
    })
  ])
}
 
路由配置

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
{
path: '/',
name: 'home',
redirect: '/home'    // 首页重置到home页,为预渲染重置到home
},

{
path: '/home',
component: HomeView
},

{
path: '/about',
name: 'about',
// 路由中不能用动态 import,但是经过测试,可以使用
component: () => import( '../views/AboutView.vue')
}
]

const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})


export default router

 
注意事项
1、预渲染插件依赖谷歌无头浏览器,这个浏览器非常大,需将npm镜像到淘宝等源,或者采用cnpm下载

2、手动修改插件源码
node_modules/prerender-spa-plugin/es6/index.js  的第60行,改个单词
改成
compilerFS.mkdir(dir, opts, (err, made) => err === null ? resolve(made) : reject(err))


3、渲染路径不能有'',  '/',不支持/product/coffee这种类似路由,这些路径都会影响包名

4、所有文件都必须可以请求到,如果seo添加一些谷歌浏览器爬虫识别文件,导致国内请求不到,会导致预渲染失败,预渲染是请求完毕所有路径才渲染,有文件请求不到会导致预渲染失败

5、需先手动清除谷歌浏览器缓存再打包,否则预渲染会读取上一次预渲染数据,导致预渲染不是最新的
posted @ 2022-07-15 14:31  蠡li  阅读(1050)  评论(2编辑  收藏  举报