nuxt系统笔记

SEO : 搜索引擎优化

  • 多页面
  • title、描述、关键词
  • 网站内容是怎么来的?

vue解决seo问题 

 解决方式一:预渲染

        A> 使用插件:prerender-spa-plugin

                1. vue项目中安装prerender-spa-plugin

                        npm install prerender-spa-plugin -S

                2. vue.config.js进行配置

                

const path = require('path');
const PrerenderSPAPlugin = require('prerender-spa-plugin');

module.exports = {
  publicPath: './',
  configureWebpack: {
    plugins: [
      new PrerenderSPAPlugin({
        staticDir: path.join(__dirname, 'dist'),
        routes: [
          '/',
          '/about',
          '/contact',
        ],
      }),
    ],
  },
};

        B> 修改title描述关键词:vue-meta-info

                1. 下载

                        npm install vue-meta-info -S

                2. 到页面组件中配置

                        

metaInfo: {
      title: '首页', // set a title
      meta: [{                 // set meta
        name: 'keyWords',
        content: 'My Example App'
      }]
    }

        可以解决:

                        1. 打包多页面

                        2. 可以解决每个页面单独生成title描述关键词 [vue-meta-info]

                        3. 接口数据是在html生成之前就放在页面上的,爬虫可以抓取到内容

        存在的问题:

                        1. 预渲染无法配置动态路由

                        2. 如果title描述关键词来自于接口的数据,配置到meta-info也是不行的

                适合做什么项目:一个项目可能某几个页面需要做seo

预渲染图解

 解决方式二:服务端渲染(通过SSR)

        适合做什么项目:一个项目可能所有页面都要做seo

服务端渲染图解

解决seo的问题:

        1. 前后端不分离

                压力在后端

                好处:安全

        2. 前后端分离的

                2.1 spa单页面应用[vue-cli本身处理不了seo]

                        压力在客户端

                2.2 预渲染

                        压力在客户端

                        问题:

                                1. 在html页面加载之前数据过来渲染后才有html的dom结构,这样的话可能也会存在页面空白的情况

                                2. 一个项目不是所有页面都做seo

                2.3 服务端渲染

                        压力在服务端

                        问题:起了2个服务 [一个是后端自己语言的服务,一个是nodejs的服务]

一、创建项目

npx create-nuxt-app <项目名>

安装过程中的选项

  • Programming language : 程序设计语言
  • Package manager : 包管理器
  • UI framework : ui框架
  • Nuxt.js modules : nuxt的js模块
  • Linting tools : 代码校验工具
  • Testing framework : 测试框架
  • Rendering modules : 渲染模式
  • Deployment target : 部署目标
  • Development tools : 开发工具 
  • Version control system : 版本控制工具

二、目录结构 

  • pages : 存放页面                              类似于src/views
  • components : 存放组件                    类似于src/components
  • static : 存放静态资源                        类似于src/assets
  • store : vuex状态树                            类似于src/store
  • nuxt.config.js : 全局的配置文件        类似于vue.config.js

 三、服务端生命周期

        1.1 nuxtServerInit( store , context ){}

                参数1 : vuex上下文

                参数2 : nuxt上下文

        1.2 middleware({store,route,redirect,params,query,req,res}){}

                ***类似于vue中的导航守卫

                a>全局

                        nuxt.config.js进行配置                 

                        router: {

                                  middleware: '名称'

                                }

                        新建middleware目录 ==> 文件.js

                b>页面            

                        <script>

                                export default {

                                          middleware: 'auth'

                                        }

                        </script>

                        新建middleware目录 ==> auth.js

                或者

                        <script>

                                export default {

                                          middleware() {

                                           }

                                     }        

                        </script>

        1.3 validate({params,query}){}

                ***校验url参数

                        <script>

                                export default {

                                          validate({ params, query }) {

                                                   console.log('validate');

                                                   return /^\d+$/.test(query.id);

                                          }

                                }

                        </script>

        1.4 asyncData({store,params}){}

                ***pages中的页面来请求数据的

        1.5 fetch({app,store,params}){}

四、服务端和客户端共有的生命周期

  • beforeCreate
  • created

五、客户端生命周期

  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed

 六、nuxt路由

        1.1 自动生成

                链接:https://www.nuxtjs.cn/guide/routing

                路由的跳转和vue差不多   注意 <nuxt-link> 就行了

        1.2 使用router.js

                a>  下载 : @nuxtjs/router

                        npm i @nuxtjs/router -S

                b>  下载完成后在nuxt.config.js的modules模块进行配置

                        modules: [

                                '@nuxtjs/router'

                        ],

                c>  把router文件放入nuxt项目根目录

                                ***必须router.js

                d>  修改router.js的内容

                e>  nuxtjs/router返回的内容和vue有所不同

                          export function createRouter() {

                                  return new Router({

                                            mode: 'history',

                                            routes

                                  })

                          }

 七、nuxt导航守卫

        一、router.js

                vue-cli中怎么用,nuxt中就怎么用,几乎一样。

        二、nuxtjs

                2.1 中间件 : middleware

                        a>全局

                                1. nuxt.config.js进行配置

                                        router:{

                                                    middleware:'auth'

                                        }

                                2. 新建middleware/auth.js文件

                                        export default ()=>{

                                                  console.log( 'middleware' );

                                        }

                        b>局部

                                新建middleware/auth.js文件

                                        export default ()=>{

                                                  console.log( 'middleware' );

                                        }

                                        <script type="text/javascript">

                                        export default{

                                                middleware:'auth'

                                        }

                                        </script>

                                        或:

                                      <script type="text/javascript">

                                       export default{

                                                middleware(){

                                                  }

                                        }

                                      </script>

                2.2 插件 : plugins 全局

                        a> nuxt.config.js进行配置

                              plugins: [

                                         '~/plugins/router.js'

                              ]

                        b> 新建plugins/router.js

                              export default ({app})=>{

                                        app.router.beforeEach((to,from,next)=>{ 

                                                console.log( to );

                                                 next();

                                        })

                              }

                ****补充:服务端不能使用localStorage和cookie的解决方案

                参考链接:https://www.npmjs.com/package/cookie-universal-nuxt

                1. 安装下载

                        npm i --save cookie-universal-nuxt

                2. nuxt.config.js进行配置

                        modules: [

                                  'cookie-universal-nuxt'

                        ]

                3. 就正常使用

                        this.$cookies.set()

                        this.$cookies.get()

                        ....

八、config配置head

组件局部:

<script type="text/javascript">
export default {
  head() {
    return {
      title: '我们的爱',
      meta: [
        { hid: 'description', name: 'description', content: '此处是网站描述' },
        { hid: 'keywords', name: 'keywords', content: '此处是网站关键词' }
      ]
    }
  }
}
</script>

九、config配置sass

如果要使用sass需要安装:npm install --save-dev sass sass-loader@10

某个页面或者组件就可以使用

<style scoped lang='scss'></style>

十、config配置plugins

plugins是用来配置js文件的,一般用来配置axios二次封装,element-ui等第三方组件库

十一、config配置modules和数据交互

        一、安装axios

                1.1 npm install @nuxtjs/axios -S

                1.2 nuxt.config.js进行配置

                        modules: [

                                  '@nuxtjs/axios',

                        ],

        二、安装axios(跟vue一样)(不推荐)

                2.1 npm install axios -S

        三、asyncData生命周期 || 方法

                pages 目录中的页面组件才可以去用

                        ***注意components内的.vue文件是不可以使用的

                asyncData中没有this,想要把数据放到data中必须要return

                        

export default {
  data() {
    return {
      listData: []
    }
  },
  async asyncData({ $axios }) {
    const res = await $axios.get('接口地址');
    const data = res.data.data.list;
    return {
      listData: data
    }
  },
}

                

        四、fetch生命周期 || 方法

                fetch是有this的,该方法在pages 目录中的页面组件可以使用,但是可能渲染不到数据,最好在components内的.vue文件使用。

export default {
  data() {
    return {
      listData: []
    }
  },
  async fetch() {
    const res = await this.$axios.get('接口数据');
    const data = res.data.data.list;
    this.listData = data;
  }
}

十二、config配置代理

        一、安装

                npm install @nuxtjs/axios @nuxtjs/proxy -S

        二、nuxt.config.js进行配置

	modules: [
	    '@nuxtjs/axios',
	    '@nuxtjs/proxy'
	],
	axios:{
	    //是否可以跨域
	    proxy:true,
	    //retry:{ retries:3 },
	    //baseUr: process.env._ENV == 'production'? 'xxx' ? 'xxx'
	},
	proxy:{
	    '/api':{
	      target:'http://localhost:4000',
	      pathRewrite:{
	        '^/api':'',
	      }
	    }
	},

十三、nuxt的axios简单封装

export default ({ $axios, store }) => {
  //请求拦截器
  $axios.onRequest((config) => {
    //config.headers["Authorization"] = store.state.token;
    return config;
  });

  //响应拦截器
  $axios.onResponse((response) => {
    return response.data;
  });
};

        解耦合

                一、配置: nuxt.config.js

			plugins: [
			    '~/plugins/axios',
			    '~/api/xxx'
			],

               二、xxx.js中写入

			export default ({$axios},inject)=>{

				inject('getFirstCategorys',()=>$axios({
					url:'/api/course/category/getFirstCategorys',
			        method:'GET',
				}))

			}

                三、页面或者组件请求

			async asyncData( app ){
			    let res = await app.$getFirstCategorys();
			    return {
			    	list:res.data.list
				}
			}

十四、config配置loading

        一、nuxtjsloading默认是开启的,也可以关闭

                nuxt.config.js中

                loading:false

        二、也可以自定义

                loading: '~/components/loading.vue',

                loading.vue中写入对应的内容

                查看api:https://www.nuxtjs.cn/api/configuration-loading

        三、也可以不用nuxtjs的loading

                loading:false

                自己在axios中进行封装

十五、vuex状态树(分模块)

创建store/indes.js

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

import user from "./modules/user";

const store = () =>
  new Vuex.Store({
    modules: {
      user,
    },
  });

export default store; 

创建store/modules/user.js

export default {
  state: {
    image: "图片路径",
  },
  getters: {},
  mutations: {},
  actions: {},
};

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Nuxt.js 3 和 Vue.js 3 是两个基于 Vue.js 框架的最新版本,它们提供了构建可扩展和高性能 Web 应用程序的强大工具,特别适合用于开发管理系统Nuxt.js 3(以前称为 Nuxt.js)是一个基于 Vue.js 的全栈框架,它采用.vue单文件组件的概念,并提供了模块化架构、SSR (服务器渲染) 和 PWA ( Progressive Web App ) 功能。在 Nuxt 3 中,更新带来了更简洁的API、更好的性能优化以及对Vue 3特性的支持,如Composition API和Ref Propagation。 Vue.js 3 是Vue的核心库的最新迭代,它在保留易用性和灵活性的同时,引入了更高效的数据绑定机制、更强大的响应式系统以及更多的内置功能。Vue 3 提供了更好的开发体验,特别是在大型应用中的代码组织和性能优化方面。 如果你想要构建一个管理系统Nuxt 3 结合 Vue 3 可以提供以下优势: - **快速开发**:模板化的开发环境和高效的脚手架能加速项目搭建。 - **SEO友好**:SSR功能有助于提升搜索引擎排名。 - **组件重用**:利用Vue的组件化思想,可以轻松创建可复用的UI模块。 - **状态管理**:通过Vuex或pinia等库,可以集中管理应用程序的状态。 - **路由管理**:Nuxt Router 支持动态路由和导航守卫。 - **热加载**:开发时实时刷新,无需重启浏览器。 相关问题: 1. 如何在Nuxt 3中集成Vuex作为状态管理工具? 2. Nuxt 3如何处理Vue 3的Composition API并应用到管理系统中? 3. 怎么利用Vue 3的响应式系统提高管理系统的用户体验?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值