Nuxt.js是使用 Webpack 和 Node.js 进行封装的基于Vue的SSR框架
优点:
更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面。首屏渲染速度快
缺点:
Node.js 中渲染完整的应用程序,显然会比仅仅提供静态文件的 server 更加大量占用 CPU 资源。需要考虑服务器负载,缓存策略
npx create-nuxt-app nuxt-project
cd nuxt-project
yarn dev
env 可以配置环境变量通过cross-env
env:{
baseUrl:process.env.BASE_URL
}
loading (需要等待$loading 挂载完成)
loading: { color: '#000',height:'10px' }
mounted(){
this.$nextTick(()=>{
this.$nuxt.$loading.start()
});
}
transition动画效果
config.js
transition: {
name: 'layout',
mode: 'out-in'
},
.layout-enter-active, .layout-leave-active {
transition: opacity .5s
}
.layout-enter, .layout-leave-active {
opacity: 0
}
使用history.pushState跳转页面,不会触发页面整体重新渲染
<nuxt-link to="/user/4/5">路径参数</nuxt-link>
export default {
validate({params}){
return params.id != 4;
}
}
.page-enter-active, .page-leave-active {
transition: opacity .5s;
}
.page-enter, .page-leave-active {
opacity: 0;
}
如果经过服务端则在服务端执行
export default function ({ store, redirect }) {
if (!store.state.user) {
return redirect('/login')
}
}
router: {
middleware: 'auth'
}
增加错误页面,错误页需要配置layout
export default {
props:['error'],
layout:'page'
}
async asyncData ({ params }) { // 无this
let { data } = await axios.get();
return { title: data }
}
扩展原型上的方法plugins
export default function({app},inject){
inject('my',()=>{ // 在app上和this都注册这个方法
console.log('my');
})
}
nextServerinit 只在主模块中使用
nuxt.config.js 全局中间件
matching layout 不同布局的中间件
matching page & children 页面中间件
validate 返回false显示错误页面
asyncData 服务端渲染的页面数据请求
fetch 同步vuex数据
element-ui + redis + mongo + nuxt