环境:
webpack: 5
vue-cli:5.0.6
vue: 2.6.14
prerender-spa-plugin: 3.4.0
main.js
:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import VueMetaInfo from 'vue-meta-info'
Vue.use(VueMetaInfo)
Vue.config.productionTip = false
new Vue({
router,
// mounted() {
// document.dispatchEvent(new Event('render-event'))
// },
render: (h) => h(App)
}).$mount('#app')
router.js
:
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
{
path: '/home',
name: 'home',
component: () =>
import(/* webpackChunkName: "home" */ '../views/home.vue')
},
{
path: '/about',
name: 'about',
component: () =>
import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
},
{
path: '/business',
name: 'business',
component: () =>
import(/* webpackChunkName: "business" */ '../views/business.vue')
}
]
const router = new VueRouter({
mode: 'history',
routes
})
export default router
在 vue.config.js
文件中使用如下配置:
const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
module.exports = {
publicPath: './',
outputDir: 'dist',
transpileDependencies: true,
configureWebpack: {
plugins: [
new PrerenderSPAPlugin(
path.resolve(__dirname, 'dist'),
['/about'],
{
captureAfterTime: 5000,
maxAttempts: 10,
navigationOptions: {
timeout: 0
},
renderer: new Renderer({
ignoreJSErrors: true,
inject: {
prerender: 'domain',
foo: 'bar'
},
headless: false, // fixed
maxConcurrentRoutes: 5,
renderAfterTime: 5000
// renderAfterDocumentEvent: 'render-event'
})
}
)
]
}
}
在 \node_modules\prerender-spa-plugin\es6\index.js
文件中也做出了如下修改:
已经先执行了 npm run build
,一切正常,之后执行 npm run serve
。
但执行 npm run serve
之后报如下错误:
请问这个该怎么解决呢?
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
根据报错信息,可以看到是 about
路由无法预渲染成功,同时也看到了以下错误信息:
Error: Evaluation failed: TypeError: Object.entries is not a function
这个错误是因为 Object.entries
方法在 Vue2 中并不支持,需要手动引入 core-js
库来解决。具体做法如下:
core-js
库:npm install core-js@3
main.js
中引入:import 'core-js/stable'
import 'regenerator-runtime/runtime'
vue.config.js
中配置:const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
module.exports = {
publicPath: './',
outputDir: 'dist',
transpileDependencies: [
'vue-meta-info',
'prerender-spa-plugin'
],
configureWebpack: {
plugins: [
new PrerenderSPAPlugin(
path.resolve(__dirname, 'dist'),
['/about'],
{
captureAfterTime: 5000,
maxAttempts: 10,
navigationOptions: {
timeout: 0
},
renderer: new Renderer({
ignoreJSErrors: true,
inject: {
prerender: 'domain',
foo: 'bar'
},
headless: false, // fixed
maxConcurrentRoutes: 5,
renderAfterTime: 5000
// renderAfterDocumentEvent: 'render-event'
})
}
)
]
}
}
需要注意的是,在 transpileDependencies
中需要将 vue-meta-info
和 prerender-spa-plugin
都加上,才能使 core-js
生效。