从0到1构建vueSSR项目之路由的构建
作者:绅士 发布时间:2024-05-09 09:52:33
标签:vueSSR,路由,构建
vue开发依赖的相关配置
Vue SSR 指南
今天先做客户端方面的配置,明天再做服务端的部分。
那么马上开始吧~
修改部分代码
脚手架生成的代码肯定是不适合我们所用的 所以要修改一部分代码
//App.vue
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'app'
}
</script>
<style>
html,body,#app,#app>*{
width: 100%;
height: 100%;
}
body{
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
font-size: 16px;
margin: 0;
overflow-x: hidden;
}
img{
width: 200px;
}
</style>
修改main.js
为什么要这么做?为什么要避免状态单例
main.js 是我们应用程序的「通用 entry」。
在纯客户端应用程序中,我们将在此文件中创建根 Vue 实例,并直接挂载到 DOM。
但是,对于服务器端渲染(SSR),责任转移到纯客户端 entry 文件。
main.js 简单地使用 export 导出一个 createApp 函数:
import Vue from 'vue';
Vue.config.productionTip = false;
import App from './App.vue';
//router store 实例
//这么做是避免状态单例
export function createApp() {
const app = new Vue({
//挂载router,store
render: h => h(App)
})
//暴露app实例
return { app };
}
添加Vue.config.js配置
webpack的入口文件有两个,一个是客户端使用,一个是服务端使用。
为何这么做?
今天只做客户端部分。
src/vue.config.js
module.exports = {
css: {
extract: false//关闭提取css,不关闭 node渲染会报错
},
configureWebpack: () => ({
entry: './src/entry/client'
})
}
根目录创建 entry 文件夹,以及webpack入口代码
mdkir entry
cd entry
创建 入口文件
client.js 作为客户端入口文件。
server,js 作为服务端端入口文件。 //先创建不做任何配置
entry/client.js
import { createApp } from '../main.js';
const { app } = createApp();
app.$mount('#app');
路由和代码分割
官方说明的已经很清楚了,我就不做过多介绍了,下面直接展示代码
添加新路由,这里将存放pages的相关路由
src/pages/router/index.js
/**
*
* @method componentPath 路由模块入口
* @param {string} name 要引入的文件地址
* @return {Object}
*/
function componentPath (name = 'home'){
return {
component:() => import(`../${name}/index.vue`)
}
}
export default [
{
path: '/home',
...componentPath(),
children: [
{
path: "vue",
name: "vue",
...componentPath('home/vue')
},
{
path: "vuex",
name: "vuex",
...componentPath('home/vuex')
},
{
path: "vueCli3",
name: "vueCli3",
...componentPath('home/vueCli3')
},
{
path: "vueSSR",
name: "vueSSR",
...componentPath('home/vueSSR')
}
]
}
]
src/router.config.js作为路由的总配置 易于管理
//路由总配置
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
//为什么采用这种做法。
//如果以后有了别的大模块可以单独开个文件夹与pages平级
//再这里导入即可。这样易于管理
// pages
import pages from './pages/router';
export function createRouter() {
return new VueRouter({
mode: 'history',
routes: [
{
path: "*",
redirect: '/home/vue'
},
...pages
]
})
}
更新main.js
import Vue from 'vue';
Vue.config.productionTip = false;
import App from './App.vue';
+ import { createRouter } from './router.config.js'
//router store 实例
//这么做是避免状态单例
export function createApp() {
+ const router = createRouter()
const app = new Vue({
+ router,
render: h => h(App)
})
//暴露app,router实例
return { app, router };
}
更新 client.js
由于使用的路由懒加载,所以必须要等路由提前解析完异步组件,才能正确地调用组件中可能存在的路由钩子。
// client.js
import { createApp } from '../main.js';
const { app, router } = createApp();
router.onReady( () => {
app.$mount('#app');
})
来源:https://segmentfault.com/a/1190000018026161
0
投稿
猜你喜欢
- 本文实例讲述了PHP实现的DES加密解密类定义与用法。分享给大家供大家参考,具体如下:今天写App接口的时候需要传递加密数据给APP端,于是
- 倒排索引一 倒排索引是什么倒排索引源于实际应用中需要根据属性的值来查找记录,这种索引表中的每一个项都包括一个属性值和具有该属性值的各记录的地
- 1. 表示操作成功,文字上方会显示一个表示操作成功的图标。wx.showToast({ title: '操作成功!
- 一、正则表达式–元字符re 模块使 Python 语言拥有全部的正则表达式功能1. 数量词# 提取大小写字母混合的单词import rea
- 写在前面之前的文章中已经讲过了遗传算法的基本流程,并且用MATLAB实现过一遍了。这一篇文章主要面对的人群是看过了我之前的文章,因此我就不再
- 前言昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式和Python里面的poplib。而POP服务器往回传的
- 当然可以,我们使用强大的fso对象来获取文件夹的大小请敲入如下代码即可:<%Set MyFileSize =&nb
- 在项目开发过程中,遇到如下用户体验提升需求:需要实现错误提示时根据后台返回错误列表信息,换行展示。实现方式如下:通过F12元素查看,在对应的
- 引言最近公司换了电脑,系统也从 win7 升级到 win11,开发环境都重新安装了一遍,然后在 idea 用mvn 执行打包命令 mvn c
- 昨天在写“同IP站点查询”工具的时候,需要先用ASP获取查询域名的IP,本来是用WSHSHELL组件,代码如下:<%@LANGUAGE
- 如何在一段文字里点一下就可以在里面插入一段文字? 如题,不要用编辑器之类的来实现。高手们帮忙呀。 <SCRIPT LANG
- 本文实例为大家分享了JS实现简易计算器的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html>
- 1.介绍 现在的网站随着访问量的增加,单一服务器无法承担巨大的访问量,有没有什么方便快捷的方式解决这个问题呢,答案是”有”!比如建立服务器群
- ASCII码键盘ASCII 码键盘ASCII 码键盘ASCII 码键盘27ESC32SPACE33!34"35#36$37%38&
- Upload组件是自带上传进度,但是样式调起来很麻烦,我们要做的就是自定义一个首先页面要引入组件 Upload, Progressuploa
- 本次案例使用OpenCV和selenium来解决一下滑块验证码先说一下思路:弹出滑块验证码后使用selenium元素截图将验证码整个背景图截
- 链表的反转是一个很常见、很基础的数据结构题,输入一个单向链表,输出逆序反转后的链表,如图:上面的链表转换成下面的链表。实现链表反转有两种方式
- 如下所示:# 导入模块import win32guiwin = win32gui.FindWindow(None, u'张三'
- 一、简述MySQL版本从5直接 * 到8,相信MySQL8一定会有很多令人意想不到的改进,如果不想只会CRUD可以看看。比如系统表引擎的变化
- 简介CSS Sprites并没有一个确定的中文翻译,通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技