Vue——打包后上线的步骤

645 阅读2分钟

前言:

vue项目是一个 SPA(singe page app) 项目,整个网站只有一个html文件,前端路由是利用监听网址的改变,然后去切换在index.html文件中渲染的组件模板,来达到切换页面的效果。

上线的网站,用户输入网址就想去加载前端的路由(也就是通过打包好的vue项目==>一份html文件)是不行的,因为浏览器内并没有加载过打包好的vue项目文件(html文件),就没有代码,就无法运行,网页也就不会显示,并且还会404.

打包后上线的步骤

  • 1.打包vue项目:在小黑窗中 npm run build

  • 2.将打包好的vue项目(也就是dist文件)全部发送给后端(egg文件)

  • 3.在后端的node_modules文件中将egg-static文件中config文件中的config.default.js文件中prefix:"/public/"改为prefix:"/"(修改匹配的网址前缀)

  • 4.egg框架中,用户访问网址,是先访问后端中的静态文件,再访问路由,发现没有就会返回404。

注意:页面刷新出现404,只在history模式下打包生成的vue项目中会出现,hash模式下是不会出现404这种问题的

解决刷新页面404的方法:

解决这个问题的方法:就是注册一个路由(无论输什么网址都会被访问的路由),在这个路由中去加载静态文件(打包好的vue项目生成的html文件)

后端注册路由时,注册一个通配路由,让浏览器去加载打包后生成的html文件。

router.get("/*",controller.home.vue)

在home.js文件中读取打包好的vue项目生成的html文件:

const fs=require("fs")
async vue(){
//同步读取文件
let data=fs.readFileSync(__dirname+"/../public/index.html")
//将数据发送给前端
this.ctx.body=data
}

此时用户输入随便一个网址,浏览器都会去加载静态文件(html文件),加载静态文件时,就会运行其中的代码,路由代码就会运行,运行就会去判断网址。如果匹配上,就会在渲染到页面。