Vue2 SSR渲染根据不同页面修改 meta
本文主要介绍了Vue2SSR渲染根据不同页面修改meta,分享给大家,具体如下:
注意:
经过测试,vue-meta会导致内存泄漏,请慎用…
以现在vue2的服务端渲染模式,都是通过webpack生成html模版文件(或者直接在server.js里拼接),然后通过fs.readFileSync读取该文件,再通过res.end输出,这样就造成meta修改很麻烦
这时候我们可以借助vue-meta来管理,下面以官方的vue-hackernews-2.0为例,说下使用方法:
安装
Yarn
yarnaddvue-meta
NPM
npminstallvue-meta--save
准备插件
在router/index.js里添加
importVuefrom'vue' importRouterfrom'vue-router' importMetafrom'vue-meta' Vue.use(Router) Vue.use(Meta) exportdefaultnewRouter({ //... })
服务端渲染
在server-entry.js里添加
import{app,router,store}from'./app' constisDev=process.env.NODE_ENV!=='production' constmeta=app.$meta()//这行 exportdefaultcontext=>{ router.push(context.url) context.meta=meta//这行 constss=isDev&&Date.now() //... }
在server.js里修改
renderStream.once('data',()=>{ res.write(indexHTML.head) })
为
renderStream.once('data',()=>{ const{title,meta}=context.meta.inject() indexHTML.head=indexHTML.head.replace(//g,title.text()) indexHTML.head=indexHTML.head.replace(/ /g,meta.text()) res.write(indexHTML.head) })
这里只选择替换title和description,如果还需要其他的,自行添加正则
注意:请保证模版中包含
xxxx
和
修改路由组件
在路由组件添加
exportdefault{ name:'frontend-index', prefetch:fetchInitialData, //添加以下代码 metaInfo(){ consttitle='M.M.F小屋-首页' return{ title, meta:[{vmid:'description',name:'description',content:title}] } } }
或者这样
exportdefault{ name:'frontend-article', prefetch:fetchInitialData, //添加以下代码 metaInfo(){ consttitle=this.article.title return{ title:title+'-M.M.F小屋', meta:[{vmid:'description',name:'description',content:title+'M.M.F小屋'}] } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。