vue脚手架配置预渲染及prerender-spa-plugin配置方式

目录
  • 脚手架配置预渲染及prerender-spa-plugin配置
    • 脚手架2.0:(自己的是2.0)
    • 脚手架3.0 (未验证,应该行)
  • 记录vue预渲染prerender-spa-plugin的坑
    • 安装
    • 找到build下的webpack.prod.conf.js

脚手架配置预渲染及prerender-spa-plugin配置

预渲染: 便于seo优化;既查看源码 是 html格式

用到插件:

cnpm install prerender-spa-plugin --save

脚手架2.0:(自己的是2.0)

1.build/webpack.prod.conf.js 配置

const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
const webpackConfig = merge(baseWebpackConfig, {
    plugins:[
    // vue-cli生成的配置就有了
      new HtmlWebpackPlugin({
          filename: config.build.index,
          template: 'index.html',
          inject: true,
          minify: {
              removeComments: true,
              collapseWhitespace: true,
              removeAttributeQuotes: true
          },
          chunksSortMode: 'dependency'
  	}),
  // 配置PrerenderSPAPlugin
 	 new PrerenderSPAPlugin({
      // 生成文件的路径,也可以与webpakc打包的一致。
      staticDir: path.join(__dirname, '../dist'),

      // 对应自己的所有路由文件,比如index有参数,就需要写成 /index/param1。这个其实不需要;千万不要加'/'这个     嵌套路由得commonquestion直接写即可
      routes: ['index','...','/commonQuestion','/commonQuestion/questionList','/commonQuestion/questionDetailInfo'],
      //  ;
      renderer: new Renderer({
         inject: {						// 可选;最好还是用
                      foo: 'bar'
                  },
          headless: false,				// 可选;最好用
          renderAfterTime: 5000,		// 通过实践是必选  官网说可选有误    一定要必选
           renderAfterDocumentEvent: 'render-event'				// 可选;最好用
      })
  }),
    ]
})

2.路由得index.js添加属性:

​ mode:‘history’,

修改config/index.js 中的build的 assetsPublicPath: ‘/’ ;不然会导致刷新页面路径错乱导致样式或者js丢失;

修改main.js

new Vue({
  el: '#app',
  router,
  store,				// 如果需要了切记引入啊   切记需要挂载的全部挂载上去
  render: h => h(App),
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

脚手架3.0 (未验证,应该行)

1.build/webpack.prod.conf.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'),
                    // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
                    routes: ['/', '/product','/about'],
                    // 这个很重要,如果没有配置这段,也不会进行预编译
                    renderer: new Renderer({
                        inject: {
                            foo: 'bar'
                        },
                        headless: false,
                          renderAfterTime: 5000,  //   必选哈
                        // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
                        renderAfterDocumentEvent: 'render-event'
                    })
                }),
            ],
        };
    }
}

2.main.js配置

new Vue({
  router,
  store,
  render: h => h(App),
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
}).$mount('#app')

其他修改同2.0;

记录vue预渲染prerender-spa-plugin的坑

安装

命令:cnpm install prerender-spa-plugin -D  //避免报错,会自动下载文件等待

找到build下的webpack.prod.conf.js

头部添加

const PrerenderSPAPlugin = require('prerender-spa-plugin') //引用插件
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
plugins: [
    // 配置PrerenderSPAPlugin预渲染
       new PrerenderSPAPlugin({
   // 生成文件的路径,也可以与webpakc打包的一致。
      staticDir: path.join(__dirname, '../dist'),
  // 对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
      routes: ['/','/about'],
  // 这个很重要,如果没有配置这段,也不会进行预编译
      renderer: new Renderer({
         // inject:{
           // foo:'bar'
        // },
       // 触发渲染的时间,用于获取数据后再保存渲染结果
       renderAfterTime: 5000,
           headless: false,
           // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
          renderAfterDocumentEvent: 'render-event'
       })
   }),
]

在main.js中

   new Vue({
        el: '#app',
        render: h => h(App),
        mounted () {
            document.dispatchEvent(new Event('render-event'))
        }
   })
//在HtmlWebpackPlugin中添加chunks: ['manifest', 'vendor', 'app'],      //防止报错webpackJsonp is not defined
new HtmlWebpackPlugin({
    filename: config.build.index,
    template: 'index.html',
    inject: true,
    minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true
        // more options:
      // https://github.com/kangax/html-minifier#options-quick-reference
    },
      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
     chunks: ['manifest', 'vendor', 'app'],
      chunksSortMode: 'dependency'
}),
//路由中mode:'history',

//刷新首屏闪现问题

百度方案(测试暂无效果)

根目录的index.html中添加display:none;

app.vue中中修改为block

//百度商桥重复加载出现两次的问题

在打包后生产的html中删除生成的那一份商桥代码,放到服务器会自动生成新一份

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue-cli3.0如何使用prerender-spa-plugin插件预渲染

    目录 如何使用prerender-spa-plugin插件预渲染 预渲染 prerender-spa-plugin尝试 先说一下效果吧 不好用的地方 使用 坑点 如何使用prerender-spa-plugin插件预渲染 vue-cli3.0版本 1.安装 cnpm install prerender-spa-plugin --save 2.vue-config.js中增加 const PrerenderSPAPlugin = require('prerender-spa-plugin'); c

  • vue单页面如何通过prerender-spa-plugin插件进行SEO优化

    目录 一.前言 二.过程 prerender-spa-plugin插件只能对静态的页面做预渲染实现SEO优化,如果是后台请求的数据需要做SSR处理,例如商品详情页,可使用Vue SSR,详细参考我的另一篇博客:VueSSR的一些理解和详细配置 一.前言 之前虽然一直有看过SEO相关的文章,但是一直没去实践过,然后突然技术总监要求要对咱们的官网做个SEO的优化. 于是才正式动手搞这玩意.地址:火石创造官网 首页用的根目录的index.html /bluebook页面用的bluebook目录下的in

  • vue-cli单页面预渲染seo-prerender-spa-plugin操作

    1 vue-cli-plugin-prerender-spa 使用方法: vue add prerender-spa 在安装的过程中会需要安装一个chrome,网速不好可能导致不能下载,导致安装失败,可以取消chrome的安装,然后手动下载放在指定的目录下: 安装过程中选择需要预渲染的route 安装成功: 自动在main.js中加入: 2 使用prerender-spa-plugin插件 cnpm i prerender-spa-plugin --save-dev vue-cli2.0 在bu

  • vue脚手架配置预渲染及prerender-spa-plugin配置方式

    目录 脚手架配置预渲染及prerender-spa-plugin配置 脚手架2.0:(自己的是2.0) 脚手架3.0 (未验证,应该行) 记录vue预渲染prerender-spa-plugin的坑 安装 找到build下的webpack.prod.conf.js 脚手架配置预渲染及prerender-spa-plugin配置 预渲染: 便于seo优化:既查看源码 是 html格式 用到插件: cnpm install prerender-spa-plugin --save 脚手架2.0:(自己

  • 基于vue中css预加载使用sass的配置方式详解

    1.安装sass的依赖包 npm install --save-dev sass-loader //sass-loader依赖于node-sass npm install --save-dev node-sass 2.在build文件夹下的webpack.base.conf.js的rules里面添加配置,如下红色部分 { test: /\.sass$/, loaders: ['style', 'css', 'sass'] } <span style="color:#454545;"

  • Vue使用预渲染代替SSR的方法

    页面渲染方式 前段时间了解到页面有几种渲染方式:SPA SSR,以前写的一个网站但是用的渲染方式是 SPA,导致搜索引擎爬虫抓不到任何信息,对 SEO 优化不很好,本想改成 SSR,但是改动配置很多,弄来弄去怕影响开发,今天在 Vue 官网看到预渲染,今天试了下,感觉是一个折中的方法,而且配置改动不大,大家可以试试 什么是服务器端渲染 (SSR)? Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲

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

    目录 前言 vue-cli2.0版本 vue-cli3.0版本 总结 前言 使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr(服务端渲染)和预渲染两种解决方案,这里我们只讨论预渲染 vue-cli2.0版本 安装 npm install prerender-spa-plugin --save webpack.prod.conf.js增加部分代码 const path = require('path') const PrerenderSPAPlugin = re

  • vue脚手架中配置Sass的方法

    世界上最成熟.最稳定.最强大的专业级CSS扩展语言! 兼容CSS Sass完全兼容所有版本的CSS.我们对此严格把控,所以你可以无缝地使用任何可用的CSS库. 特性丰富 Sass拥有比其他任何CSS扩展语言更多的功能和特性.Sass核心团队不懈努力,一直使其保持领先地位. 成熟 Sass已经经过其核心团队超过8年的精心打造. 行业认可 一次又一次地,行业把Sass作为首选CSS扩展语言. 社区庞大 数家科技企业和成百上千名开发者为Sass提供支持. 框架 有无数的框架使用Sass构建.比如Com

  • VUE脚手架的下载和配置步骤详解

    VUE脚手架下载 1.第一步全局安装脚手架 cnpm i @vue/cli -g 2.第二步创建项目 创建文件夹,打开文件命令窗口 vue create 自己创建的项目名 3. 有两个选项,选择第二个,也就是自己选择配置 4. 选择自己需要的配置 5. 进行下一步,选择 Y 6. 选择自己的类型 7.选择.json类型 8.此处, 选择 N 下载完成 文件夹完成下载 最后把 文件跑起来 以上所述是小编给大家介绍的VUE脚手架的下载和配置详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,

  • VUE预渲染及遇到的坑

    本文介绍了VUE预渲染及遇到的坑,分享给大家,具体如下: npm install -D prerender-spa-plugin 修改webpack.prod.conf.js,在CopyWebpackPlugin后面,增加内容. var PrerenderSpaPlugin = require('prerender-spa-plugin') new PrerenderSpaPlugin( //将渲染的文件放到dist目录下 path.join(__dirname, '../dist'), //需

  • 详解基于vue的服务端渲染框架NUXT

    Nuxt 随着现在vue和react的流行,许多网站都做成了SPA,确实提升了用户体验,但SPA也有两个弱点,就是SEO和首屏渲染速度.为了解决单页应用的痛点,基于vue和react的服务端渲染应运而生.由于公司的框架采用的是vue,所以就简单的研究了一下基于vue的服务端渲染框架--NUXT.在vue的官网有关于服务端渲染的详细介绍,而NUXT集成了利用Vue开发服务端渲染的应用所需要的各种配置,也集成了Vue2.vue-router.vuex.vux-meta(管理页面meta信息的),利用

  • Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解

    一.Vue的实例 1.1.创建一个 Vue 的实例 每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({// 选项}) 虽然没有完全遵循 MVVM 模型,Vue 的设计无疑受到了它的启发.因此在文档中经常会使用 vm (ViewModel 的简称) 这个变量名表示 Vue 实例. 1.vue.js就是一个构造器,通过构造器Vue来实例化一个对象:例如:var vm = new Vue({}); 2.实例化Vue时,需要传入一个参数(选项

  • 详解服务端预渲染之Nuxt(介绍篇)

    现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的时候是在网页中爬取数据,由于单页面应用读取到的页面是几乎空白的,无法爬取到任何数据信息. <!DOCTYPE html> <html> <head> <meta charset=utf-8> <meta name=viewport content=&quo

随机推荐