vue 服务端渲染 vs 预渲染(1)

摘要:
例如,在//上部署应用程序https://www.foobar.com/my-app///然后将值更改为“/my app///baseUrl://”https://vuejs.org/v2/guide/installation.html#Runtime-Compiler vs Runtime onlyruntimeCompiler:false,//默认情况下,babel加载器将跳过“node_ Modules”Dependent//使用此选项,您可以显示和转换依赖项transpileDependencies:[/*stringorregex*/]//是否要为生产环境生成sourceMap?ProductionSourceMap:false,//调整内部webpack配置//seehttps://github.com/vuejs/vue-cli/blob/dev/docs/webpack.mddevServer:{端口:8081,代理:{'/apis':{目标:'http://101.132.34.30/',changeOrigin:true,pathRewrite:{“^/apis”:“”}}}},configureWebpack:。

服务端渲染:

1、将完整的html输出到客户端

2、要使用通用代码

优点 :

 1、首次渲染快(无需等所有的js都完成下载)

  2、利于seo

缺点:

 1、更多的服务器负载

2、开发受限

3、需要处于node.js/php server 运行环境

预渲染:

 1、使用少数营销页的seo

  2、生成对特定路由静态的html文件

优点:

  1、预渲染更简单

  2、将前端作为一个完全静态的站点

缺点

  1、若网站有成百上千条路线,预编译会非常缓慢

预渲染核心:prerender-spa-plugin
安装:   cnpm install prerender-spa-plugin --save-dev

步骤

创建项目

vue create 001_prerender_spa

安装 prerender-spa-plugin

npm install prerender-spa-plugin --save-dev

配置 vue.config.js

在文件的根目录创建vue.config.js文件   

官网上查看如何配置

https://www.npmjs.com/package/prerender-spa-plugin

// const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');
module.exports = {
  /** 区分打包环境与开发环境
   * process.env.NODE_ENV==='production'  (打包环境)
   * process.env.NODE_ENV==='development' (开发环境)
   * baseUrl: process.env.NODE_ENV==='production'?"https://cdn.didabisai.com/front/":'front/',
   */
  // 项目部署的基础路径
  // 我们默认假设你的应用将会部署在域名的根部,
  // 例如 https://www.my-app.com/
  // 如果你的应用部署在一个子路径下,那么你需要在这里
  // 指定子路径。比如将你的应用部署在
  // https://www.foobar.com/my-app/
  // 那么将这个值改为 '/my-app/ 
  // baseUrl: "/", // 构建好的文件输出到哪里
  outputDir: "dist", // where to put static assets (js/css/img/font/...) // 是否在保存时使用‘eslint-loader’进行检查 // 有效值: true | false | 'error' // 当设置为‘error’时,检查出的错误会触发编译失败
  lintOnSave: true, // 使用带有浏览器内编译器的完整构建版本 // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
  runtimeCompiler: false, // babel-loader默认会跳过`node_modules`依赖. // 通过这个选项可以显示转译一个依赖
  transpileDependencies: [    /* string or regex */
  ], // 是否为生产环境构建生成sourceMap?
  productionSourceMap: false, // 调整内部的webpack配置. // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
  devServer: {
    port: 8081,
    proxy: {
      '/apis': {
        target: 'http://101.132.34.30/',
        changeOrigin: true,
        pathRewrite: {
          '^/apis': ''
        }
      }
    }
  },

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


}

main.js配置

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

Vue.config.productionTip = false;

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

打包完成后静态文件就会在dist文件夹中

免责声明:文章转载自《vue 服务端渲染 vs 预渲染(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇创建最简单的exe形式COM组件并在MFC程序调用移动端——meta标签下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

uniapp开发支付宝小程序,ios软键盘会把底部fixed定位的输入框覆盖掉有效解决方法

这个问题应该可以定义为ios的兼容性、目前测试的只有在ios上才会有这种情况 之前百度找的用uniapp里面的参数输入框设置cursor-spacing="0" 或者等于其他数值、然后基本无效 解决方法就一行css代码就可以了、把外层高度设置为100vh,就不会出现刚刚的兼容性,我的是tbody设置的h:100vh,cont靠内容自己撑起来 然后我html...

ThingJS官方示例教程(二)

上一节我们说到了如何在ThingJS中上传我们的图片、js、css资源,同时也详细说明如何去使用这些资源,在拥有了JavaScript基础、同样也了解到如何去使用上传到ThingJS的资源的情况下,我们就可以开始通过ThingJS在线开发平台制作我们的第一个“HelloWorld”项目了。 ThingJS项目初制作 在ThingJS中,最重要的就是我们的A...

vue设置全局样式:loadOptions

vue中全局设置样式有两种方法: 第一种:只需要在main.js中引入 如global.css html,body,#app{ height: 100%; margin: 0px; padding: 0px; } 在main.js中引入 import "./styles/index.scss";import './assets/cs...

[记录]解决vue项目当直接通过url访问中间页时nginx返回404的问题

    应用为VUE单页应用,路由模式为history,web服务器为nginx,正常情况下如果直接通过url访问一个中间页(不是index.html)时,会看到nginx返回的404错误,这个问题目前我只能通过修改nginx站点配置文件来实现。 具体代码(只看红色加粗的部分就行): server { listen 80; serv...

如何使用华为机器学习服务和Kotlin实现语音合成

1. 引言   你曾遇到过这种情况吗?一本小说太长,要花很长时间阅读,但如果有app能自动为你阅读,就会省时很多。因此,将文本转换成语音的工具应运而生。华为机器学习服务(HUAWEI ML Kit)具备语音合成(Text To Speech, TTS)功能,能让app快速实现从文本到语音的转换。TTS可以将文本转换成人声。这也可以通过默认方法实现,但这些方...

vue filter 去掉HTML标签

Vue.filter('removeHtml', input => { return input && input.replace(/<(?:.| )*?>/gm, '') .replace(/(&rdquo;)/g, '"') .replace(/&ldquo;/g, '"')...