Vue单页面应用做预渲染的方法实例

 更新时间:2021年10月26日 09:06:21   作者:_Battle  
vue是一个单页面的应用,这导致一些爬虫和百度无法搜索到,如果你想针对你应用的其中某些页面进行SEO优化,让他们可以被爬虫和百度搜索到,你可以进行预渲染操作,下面这篇文章主要给大家介绍了关于Vue单页面应用做预渲染的相关资料,需要的朋友可以参考下

前言

使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr(服务端渲染)和预渲染两种解决方案,这里我们只讨论预渲染

vue-cli2.0版本

安装

npm install prerender-spa-plugin --save

webpack.prod.conf.js增加部分代码

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')    // 引入插件
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

plugins:[
	// 配置PrerenderSPAPlugin
    new PrerenderSPAPlugin({
      // 生成文件的路径,也可以与webpakc打包的一致。
      staticDir: path.join(__dirname, '../dist'),
      
      // 对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
      routes: ['/', '/report','/genius','/index/param1'],
      // 一定要写,如果没有配置这段,也不会进行预编译
      renderer: new Renderer({
          inject: {
            foo: 'bar'
          },
          headless: false,
          // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
          renderAfterDocumentEvent: 'render-event'
      })
    })
]

在main.js中添加

new Vue({
  el: '#pingce',
  router,
  store,
  components: { App },
  template: '<App/>',
  // 添加mounted,不然不会执行预编译
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

router.js中设置mode: "history"

运行npm run build,看一下生成的 dist 的目录里是不是有每个路由名称对应的文件夹。然后找个 目录里 的 index.html 用IDE打开,看文件内容里是否有该文件应该有的内容。

每一个你所配置得路由都会生成一个文件夹,然后每个文件夹下边都会生成一个index.html

vue-cli3.0版本

3.0的cli看上去简洁多了,去掉了2.0 build和config等目录,那我们怎么去修改webpack的配置呢?

在根目录下创建vue.config.js,进行你的配置。

安装

npm install prerender-spa-plugin --save

vue-config.js中增加

const PrerenderSPAPlugin = require('prerender-spa-plugin');  // 引入插件
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');
module.exports = {
    configureWebpack: config => {
        if (process.env.NODE_ENV !== 'production') return;
        return {
            plugins: [
                new PrerenderSPAPlugin({
                    // 生成文件的路径,也可以与webpakc打包的一致。
                    // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
                    staticDir: path.join(__dirname,'dist'),
                    // 对应自己的路由文件,比如about有参数,就需要写成 /about/param1。
                    routes: ['/', '/product','/about'],
                    // 必须配置不然不会进行预编译
                    renderer: new Renderer({
                        inject: {
                            foo: 'bar'
                        },
                        headless: false,
                        // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
                        renderAfterDocumentEvent: 'render-event'
                    })
                }),
            ],
        };
    }
}

在main.js中添加

new Vue({
  router,
  store,
  render: h => h(App),
  // 与 vue-config.js的renderAfterDocumentEvent: 'render-event'名字一定要对应上
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
}).$mount('#app')

router.js 中设置mode: “history”

运行npm run build,看一下生成的 dist 的目录里是不是有每个路由名称对应的文件夹。

总结

1.路由的模式最好使用history模式,不使用也可以运行生成文件,但是查看每个index.html文件内容师一样的。

2.在3.0中和2.0中的设置大致是一样的但是极个别的地方一定有注意

在2.0中,设置  staticDir: path.join(__dirname,'../dist')

在3.0中,设置  staticDir: path.join(__dirname,'dist')

如果这两个设置错了,运行npm run build 都会报错。

如果你想设置每个页面的 title 和 meta 信息推荐使用 [vue-meta-info]

到此这篇关于Vue单页面应用做预渲染的文章就介绍到这了,更多相关Vue单页面应用预渲染内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单聊一聊axios配置请求头content-type

    简单聊一聊axios配置请求头content-type

    最近在工作中碰到一个问题,后端提供的get请求的接口需要在request header设置,下面这篇文章主要给大家介绍了关于axios配置请求头content-type的相关资料,需要的朋友可以参考下
    2022-04-04
  • 解决vue打包css文件中背景图片的路径问题

    解决vue打包css文件中背景图片的路径问题

    今天小编就为大家分享一篇解决vue打包css文件中背景图片的路径问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue 数组和对象更新,但是页面没有刷新的解决方式

    Vue 数组和对象更新,但是页面没有刷新的解决方式

    今天小编就为大家分享一篇Vue 数组和对象更新,但是页面没有刷新的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue实现步骤条效果

    Vue实现步骤条效果

    这篇文章主要为大家详细介绍了Vue实现步骤条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 关于Vue 消除Token过期时刷新页面的重复提示问题

    关于Vue 消除Token过期时刷新页面的重复提示问题

    很多朋友在token过期时刷新页面,页面长时间未操作,再刷新页面时,第一次弹出“token失效,请重新登录!”提示,针对这个问题该怎么处理呢,下面小编给大家带来原因分析及解决方法,一起看看吧
    2021-07-07
  • Vue实现拖放排序功能的实例代码

    Vue实现拖放排序功能的实例代码

    本文通过实例代码给大家介绍了Vue中实现拖放排序功能,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 详解vue父子组件状态同步的最佳方式

    详解vue父子组件状态同步的最佳方式

    这篇文章主要介绍了vue父子组件状态同步的最佳方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 利用vue.js把静态json绑定bootstrap的table方法

    利用vue.js把静态json绑定bootstrap的table方法

    今天小编就为大家分享一篇利用vue.js把静态json绑定bootstrap的table方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • elementui el-select change事件传参问题

    elementui el-select change事件传参问题

    这篇文章主要介绍了elementui el-select change事件传参问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 深入理解Vue官方文档梳理之全局API

    深入理解Vue官方文档梳理之全局API

    本篇文章主要介绍了深入理解Vue官方文档梳理之全局API,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论