首页 > 其他分享 >Vue预渲染prerender-spa-plugin+vue-meta-info

Vue预渲染prerender-spa-plugin+vue-meta-info

时间:2024-07-02 11:43:37浏览次数:21  
标签:info prerender Vue name plugin js meta 页面

前言:

公司现有一个新需求需要在原有的vue2项目上面进行预渲染,进行SEO的优化,在网上进行了一系列的搜索,发现两种简单易上手的方案(1.使用prerender-spa-plugin+vue-meta-info进行打包构建;2.使用nuxt.js在开发过程中就渲染呈现出来)

因是在原有项目基础上进行,所以采用第一种方案进行构建渲染,话不多说,直接上代码!!!

一、prerender-spa-plugin插件使用

1.安装

//npm 
npm install prerender-spa-plugin --save
//yarn
yarn add prerender-spa-plugin --dev

2.找到build文件下webpack.prod.conf.js 在页面中添加代码

// 预渲染
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer



plugins: [

    // 预渲染
    new PrerenderSPAPlugin({
      // 生成文件的路径,也可以与webpakc打包的一致。
      // 下面这句话非常重要!!!
      // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
      staticDir: path.join(__dirname, '../dist'),
 // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
      routes: ['/', '/index'],
// 这个很重要,如果没有配置这段,也不会进行预编译
      renderer: new Renderer({
        inject: {
          foo: 'bar'
        },
        // headless: false,
        // renderAfterDocumentEvent: 'render-event', // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
        // args: ['--no-sandbox', '--disable-setuid-sandbox']
        navigateOptions:{
          timeout: 0,
        }
      })
]

3.在main.js里面添加mounted newEvent('document')     document名字必须与第二步中的名字对呀

  // 添加mounted,不然不会执行预编译
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }

4.router.js中一定要设置history模式

 5.npm run build
打包之后可以看到配置好的路由生成了相应的html页面

 二、vue-meta-info使用

1.插件安装

npm install vue-meta-info --save

2.main.js引用

import MetaInfo from 'vue-meta-info'
// 注册 
Vue.use(MetaInfo)

3.页面上使用

  3.1-直接在页面上使用

//单个页面配置
<template>
    <div>首页</div>
</template>
export default {
    name:'首页'
    metaInfo:{
        title:'首页',
        meta:[
            {
                name: 'keyWords',
                content:'关键字'
            },
            {
                name:'description',
                content:'描述'
            }
        ]
    }
}
//多页面配置
<template>
    <div>首页</div>
</template>
export default {
    name:'index'
    metaInfo():{
        return{
            meta:this.metaData
        }
    },
    data(){
        return{
            metaData:''
        }
    },
    watch:{
        $route(to,form){
        //通过跳转页面配置每个页面的关键字和描述,这只是个例子
        //注意如果通过to.path去判断 需要进行兼容判断 因为渲染后的访问路径会在末尾自动添加/ 例如 loclhost:3000/index/,这个时候就需要 to.path === '/index' || to.path==='/index/'
            if(to.name === 'index'){
                this.metaData=[
                    {
                        name: 'keyWords',
                        content:'关键字'
                    },
                    {
                        name:'description',
                        content:'描述'
                    }
                ]
            }
            //当然也可以封装一个方法去返回每个页面的文案
            //this.metaData = metaSetFuc(to.name)
        }
    }
}

  3.2-新建一个js文件里面

export default {
  index: {
    title: 'title',
    meta: [
      {
        name: 'keywords',
        content: ''
      },
      {
        name: 'description',
        content: ''
      }
    ]
  },
}

然后再页面上面去引用

//导入存放的文件路径
import VueMetaInfo from '../assets/vue-meta-info.js'
export default {
  metaInfo: VueMetaInfo.index,
}

三、在使用中遇到的问题

1.[prerender-spa-plugin] Unable to prerender all routes! 错误

在node_modules -> @prerender -> renderer-puppeteer -> es6 -> renderer.js(113行)

await page.goto(`${baseURL}${route}`, navigationOptions);
//修改为
await page.goto(`${baseURL}${route}`, {...navigationOptions, timeout: 0});

 

标签:info,prerender,Vue,name,plugin,js,meta,页面
From: https://www.cnblogs.com/WEB_zhumeng/p/18279604

相关文章

  • vue3.4+最新属性变化
    Attribute绑定新增简写方法<!--与:id="id"相同--><div:id></div><!--这也同样有效--><divv-bind:id></div>动态参数<av-bind:[demoName]="url"></a>//简写<a:[demoName]="url"></a>......
  • 解决Vue template模板中单一根元素
    引言错误的用法会导致页面加载空白<template><divid="1">内容1<div><divid="2">内容2<div></template>解决Vue模板中单一根元素要求的问题及原理解析在Vue.js开发中,单一根元素的要求是确保Vue能够有效地编译和渲染组件的重要规则之一。本文将深入探讨这一......
  • Vue3 从零到全掌握:最详尽的入门指南(近万字超全内容)
    一、Vue脚手架Vue3官方文档地址:https://v3.cn.vuejs.org/以前的官方脚手架@vue-cli也可以用,但这里推荐一个更轻快的脚手架Vite脚手架网址:Vite中文网方式一:vue-cli脚手架初始化Vue3项目官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create// ......
  • Vue.js 安装
     1、独立版本我们可以在Vue.js的官网上直接下载vue.min.js并用 <script> 标签引入。2、使用CDN方法以下推荐国外比较稳定的两个CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。StaticfileCDN(国内) : https://cdn.staticfile.net/vue/2.2.2/vue.min.js......
  • Vue.js 目录结构
     上一章节中我们使用了npm安装项目,我们在IDE(Eclipse、Atom等)中打开该目录,结构如下所示: 目录解析目录/文件说明build项目构建(webpack)相关代码config配置目录,包括端口号等。我们初学可以使用默认的。node_modulesnpm加载的项目依赖模块src这里是我们要开发的目录,基......
  • vue2、vue3 纯SCSS 实现环形进度条
    vue3纯SCSS实现环形进度条<template><viewclass="flexalign-centerdiygw-col-24justify-center"><viewclass="progress-circle":class="`progress-${innerPercent}`"><viewclass=&quo......
  • ant-ui+vue3使用踩坑记录
    1、table组件使用Summary合计时,明明设置summary的fixed属性,设置固定还是没有生效!滚动的时候合计栏还是会滚动代码    通过查看官方文档,发现还要配合设置SummaryCell的index序号进行指定   解决方法如下,那个栏目需要固定就设置相应的index 效果 ......
  • 关于 VuePress 的插件
    07.插件插件就好比第三方功能,例如增加一个阅读进度条、增加光标效果等。VuePress官网对插件的介绍:插件通常会为VuePress添加全局功能。这里简单介绍几个本站用的插件吧!‍‍插件就好比第三方功能,例如增加一个阅读进度条、增加光标效果等,VuePress官网对插件的介绍:插件通常......
  • 毕业设计-基于Springboot+Vue的班级综合测评管理系统的设计与实现(源码+LW+包运行)
    基于SpringBoot+Vue的班级综合测评管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.baidu.com/s/1N_GWua74rAi1Qtkj1VpmHQ?pwd=zmut随着互联网技术的高速发展,人们生活的各方面都受到互联......
  • 毕业设计-基于Springboot+Vue的冬奥会科普系统的设计与实现(源码+LW+包运行)
    基于SpringBoot+Vue的冬奥会科普系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.baidu.com/s/1YFTiNrYkLJAyvU40nmzbSg?pwd=x44b任何平台都要遵循平台设计的基本流程,本平台也不例外,同样需要......