Nuxt.js快速上手

news2024/11/26 5:52:11

Nuxt.js快速上手

  • Nuxt.js快速上手
    • 1、为什么用nuxt
      • vue-cli本身问题
      • 预渲染
      • 服务端渲染(通过SSR)
      • 项目解决seo的方案选择
    • 2、Nuxt安装和使用Nuxt安装和使用
      • nuxt安装和目录结构
      • nuxt生命周期
      • nuxt路由
      • nuxt导航守卫
      • nuxt Vuex状态树
    • 3、Nuxt配置项
      • nuxt配置之head
      • nuxt配置之css
      • nuxt配置之plugins
      • nuxt配置之modules和数据交互
      • nuxt配置代理
      • nuxt配置之loading
      • nuxt配置之loading


Nuxt.js快速上手


1、为什么用nuxt

vue-cli本身问题

  • SEO:即搜索引擎优化是通过优化网站的内容、结构和其他相关因素,以提高网站在搜索引擎中的排名,增加有机(非付费)搜索流量的过程。SEO旨在使网站更容易被搜索引擎索引和理解,并提供与搜索用户意图相匹配的高质量内容。
  • 条件:
    1. 要求是多页面(非SPA)
    2. 包含title、description、keyword等页面描述信息
    3. 网站内容怎么来(页面渲染前拿到数据,还是渲染后拿到数据)
  • 使用Vue CLI构建的Vue项目在打包后会生成一个index.html文件,这是一个单页面应用(Single Page Application,SPA)的入口文件;且不是每个页面都包含各自title、description、keyword等页面描述信息;在页面渲染后才能拿到数据,爬虫无法抓取。故vue-cli存在较差的SEO。

预渲染

  • 渲染就是把数据放到页面上,预渲染就是在页面加载完成之前把数据放到页面

  • 流程:

    1. 读取配置,获取需要预渲染的页面
    2. 发布机模拟浏览器环境打开页面
    3. 页面脚本触发渲染机制
    4. 渲染出当前的页面内容
    5. 获取当前所有的DOM结构
    6. 生成HTML文件
  • 使用插件:prerender-spa-plugin

    • vue项目中安装prerender-spa-plugin,npm install prerender-spa-plugin -S
    • vue.config.js进行配置
  • 修改title描述关键词:vue-meta-info

    • vue项目中安装vue-meta-info,npm install vue-meta-info -S
    • 页面组件进行配置:
    metaInfo:{
        title:'',
        meta:[{
            name:'',
            content:''
        }]
    }
    
  • 优点:

    1. 打包生成多页面
    2. 可以解决每个页面单独title描述关键词
    3. 接口数据在html生成之前就放到页面上,爬虫可以抓取到内容
  • 缺点:

    1. 预渲染无法配置动态路由
    2. title描述关键词不能来自接口的数据
    3. 在html页面加载之前数据过来渲染后才有html的dom结构,可能存在页面空白的情况
  • 应用场景:

    • 一个项目某几个页面需要做SEO

服务端渲染(通过SSR)

  • 关于 Nuxt.js - NuxtJS | Nuxt.js 中文网

  • 服务端渲染 (SSR) | Vue.js (vuejs.org)

  • 命令 - NuxtJS | Nuxt.js 中文网

  • 流程:

在这里插入图片描述

  • 应用场景:一个项目中所有页面都需要做SEO

项目解决seo的方案选择

  • 前后端不分离

    • 页面加载压力在后端(服务端),安全,可以通过SSR来生成具有完整HTML内容的页面,有利于SEO
  • 前后端分离

    • 页面加载压力在前端(客户端),可以构建现代化的SPA单页面,提供流畅的用户体验

    • SPA单页面应用

      • 预渲染–一个项目某几个页面需要做SEO
      • 服务端渲染–一个项目中所有页面都需要做SEO
  • 选择哪种方案主要取决于具体项目的需求和优先级。对于需要SEO的页面,预渲染或服务端渲染是比较常用的解决方案。而对于不需要SEO或SEO要求较低的页面,可以完全依赖前端的单页面应用架构。


2、Nuxt安装和使用Nuxt安装和使用

nuxt安装和目录结构

  • 前置知识(安装node和vue脚手架):Vue-CLI安装方法_全局安装vue-cli_Legreay的博客-CSDN博客

  • 报错处理: ‘create-nuxt-app‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。海盗船长说他要扬帆起航的博客-CSDN博客

  • 安装:

    1. npx create-nuxt-app <项目名>,勾选配置随后生成项目

在这里插入图片描述

  1. cd <project-name>,进入项目文件夹

  2. npm run dev,启动项目,应用运行在 http://localhost:3000 上运行

  • Nuxt.js 会监听 pages 目录中的文件更改,因此在添加新页面时无需重新启动应用程序。

  • 目录:

    • 资源目录 assets 用于组织未编译的静态资源如 LESSSASSJavaScript。对于不需要通过 Webpack 处理的静态资源文件,可以放置在static 目录中。
    • 组件目录 components 用于组织应用的 Vue.js 组件。
    • 布局目录 layouts 用于组织应用的布局组件。
    • 中间件目录middleware 目录用于存放应用的中间件。
    • 页面目录 pages 用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的 .vue 文件并自动生成对应的路由配置
    • 插件目录 plugins 用于组织那些需要在 根vue.js应用 实例化之前需要运行的 Javascript 插件。
    • 静态文件目录 static 用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。服务器启动的时候,该目录下的文件会映射至应用的根路径 / 下。
    • store 目录用于组织应用的 Vuex 状态树 文件。 Nuxt.js 框架集成了 Vuex 状态树 的相关功能配置,在 store 目录下创建一个 index.js 文件可激活这些配置。
    • nuxt.config.js 文件用于组织 Nuxt.js 应用的个性化配置,以便覆盖默认配置。
    • package.json 文件用于描述应用的依赖关系和对外暴露的脚本接口。
    • 别名:或@对应srcDir,~或@@对应rootDir,默认情况下srcDirrootDir 相同。

nuxt生命周期

  • Nuxt 2 - Nuxt Lifecycle

在这里插入图片描述

服务端生命周期:

  • nuxtServerInit(store,context) {} – 在服务端渲染期间调用,可以用于初始化 Vuex 状态
    • 参数1:vuex上下文
    • 参数2:nuxt上下文
//	store/index.js
export const state = {
    token: ''
}

export const mutations = {
    setToken(state,token) {
        state.token = token;
    }    
}

export const actions = {
    nuxtServerInit(store,context) {
        store.commit('setToken','123456')
        console.log(store,'nuxtServerInit');
    }
}
  • Route Middleware – 类似于vue中的导航守卫,可以在每次路由切换之前执行一些共享的逻辑,比如身份验证、路由拦截或其他自定义操作等
//全局 nuxt.config.js进行配置,创建文件夹并创建文件
//	nuxt.config.js
router:{
    middleware:'auth'
}
//	middleware/auth.js
export default function () {
    console.log('auth middleware');
}

//页面 页面中进行配置,创建文件夹并创建文件
//	page/index.vue
<script>
export default {
  middleware: 'auth',
  //第二种写法 middleware(){}
}
</script>
//	middleware/auth.js
export default function () {
    console.log('auth middleware');
}
  • validate({params,query}){} – 校验url参数
//	pages/index.vue
validate({params,query}){
    console.log('validate');
    return /^\d+$/.test(query.id);
}
  • asyncData({params,query}){} – pages中的页面请求数据**(也只有pages目录中的页面组件才可以去用,asyncData中没有this)**,在组件渲染之前调用,用于在服务端或客户端获取异步数据,并将数据合并到组件的数据中
//	pages/index.vue
asyncData({params,query}){
    console.log('asyncData');
},
  • fetch({app,store,params}){} – 在组件渲染之前调用,用于在服务端或客户端获取异步数据。asyncData 不同的是,fetch 方法不会将数据合并到组件的数据中,而是通过返回一个 Promise 对象来处理异步数据。fetch有this。
//	pages/index.vue
fetch({app,store,params}){
    console.log('fetch');
},

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

在这里插入图片描述

beforeCreate(){
    console.log('beforeCreate');
},
created(){
    console.log('created');
},

客户端生命周期

  • 和vue中生命周期的一模一样

nuxt路由

自动生成

  • 路由 - NuxtJS | Nuxt.js 中文网

  • Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

  • 页面之间使用路由,使用< nuxt-link >标签。

//	pages/index.vue
<nuxt-link :to="{name:'list',query:{id:1},params:{id:2}}">列表页</nuxt-link>

使用router.js

  1. 下载:@nuxtjs/router,npm i @nuxtjs/router -S

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

    modules:[
        '@nuxtjs/router'
    ],
    
  3. 把router文件放入nuxt项目根目录,必须是router.js

  4. 修改router.js的内容

  5. nuxtjs/router返回的内容和vue有所不同

    import Vue from 'vue'
    import Router from 'vue-router'
    
    import MyPage from '~/components/my-page'
    
    Vue.use(Router)
    
    export function createRouter() {
      return new Router({
        mode: 'history',
        routes: [
          {
            path: '/',
            component: MyPage
          }
        ]
      })
    }
    

nuxt导航守卫

router.js

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

nuxtjs

  • 中间件:middleware

    • 全局
    • 局部
  • 插件:plugins

    • 全局
  1. nuxt.config.js进行配置
plugins:[
    '~/plugins/router.js'
],
  1. 新建plugins/router.js
export default ({app}=>{
    app.router.beforeEach((to,from.next)=>{
        console.log(to);
        next();
    })
}

nuxt Vuex状态树

  • 对于大型复杂项目而言,使用状态树(store)来管理状态(state)十分有必要,所以Nuxt.js内核实现了Vuex
  • 使用:Nuxt.js 会尝试找到 src 目录(默认是应用根目录)下的 store 目录,如果该目录存在,它将做以下的事情:
    1. 引用 vuex 模块
    2. vuex 模块 加到 vendors 构建配置中去
    3. 设置 Vue 根实例的 store 配置项
  • 具体使用同Vuex,可参考Vuex 状态树 - NuxtJS | Nuxt.js 中文网
  • 顺便附上Vuex官网教程,开始 | Vuex (vuejs.org)

3、Nuxt配置项

  • Nuxt.js 默认的配置涵盖了大部分使用情形,可通过 nuxt.config.js 来覆盖默认的配置。
  • 以下配置修改默认中nuxt.config.js改动

nuxt配置之head

  • 全局
export default {
  head: {
    title: 'demo',
    meta: [
     	{hid:'description',name:'description',content:'xxx'},
        {hid:'keywords',name:'keywords',content:'xxx'}
    ],
  },
}

  • 局部
head(){
    retrun {
        title: 'demo',
   	 	meta: [
     		{hid:'description',name:'description',content:'xxx'},
        	{hid:'keywords',name:'keywords',content:'xxx'}
    	],
    }
}

nuxt配置之css

  • 下载保存reset.css
css: [
    '~/static/reset.css'
    '@/assets/css/main.scss'
],
  • 注意:关于sass这里引用官网原文

在这里插入图片描述

在这里插入图片描述

nuxt配置之plugins

  • nuxt项目不像vue项目,没有main.js文件,所以直接在nuxt.config.js中引入文件。plugins 属性配置的所有插件会在 Nuxt.js 应用初始化之前被加载导入
plugins: [
    '~/plugins/aaa.js',
    '~/plugins/element.js'
],

nuxt配置之modules和数据交互

  • modules 是 Nuxt.js 扩展,可以扩展它的核心功能并添加无限的集成
  • npm install @nuxtjs/axios -Snpm install axios -S区别在于前者可以直接使用而不需要引入,@nuxt/***是Nuxt.js团队提供的官方模块

nuxt配置代理

  1. 安装 npm install @nuxtjs/axios @nuxtjs/proxy -S
  2. nuxt.config.js进行配置
//	nuxt.config.js
modules: [
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
],
axios:{
    proxy:true,
    retry:{retries:3},
    baseUrl:process.env._ENV == 'prod'?'dev'
} 
proxy:{
    '/api':{
        target:'http://localhost:4000',
        pathRewrite:{
            '^/api':'',
        }
    }
}

nuxt配置之loading

  • 在页面切换的时候,Nuxt.js 使用内置的加载组件显示加载进度条。可以定制它的样式,禁用或者创建自己的加载组件。
//	nuxt.config.js
loading: false
//	nuxt.config.js
modules: [
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
],
axios:{
    proxy:true,
    retry:{retries:3},
    baseUrl:process.env._ENV == 'prod'?'dev'
} 
proxy:{
    '/api':{
        target:'http://localhost:4000',
        pathRewrite:{
            '^/api':'',
        }
    }
}

nuxt配置之loading

  • 在页面切换的时候,Nuxt.js 使用内置的加载组件显示加载进度条。可以定制它的样式,禁用或者创建自己的加载组件。
//	nuxt.config.js
loading: false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效开展网络安全事件调查工作

网络安全事件调查是现代企业网络安全体系建设的关键组成部分。为了防止网络攻击&#xff0c;仅仅关注于安全工具的应用效果远远不够&#xff0c;因为安全事件一直都在发生。安全团队只有充分了解攻击者的行踪和攻击路径&#xff0c;才能更好地防范更多攻击时间的发生。 做好网…

Ffmpeg分布式视频转码问题总结

云原生分布式转码 在计算资源招之即来的云计算时代&#xff0c;正在重构着软件架构的方方面面。 对软件架构师或者运维管理者影响比较大的一个点便是不需要在做容量规划&#xff0c;不需要提前评估为了应对某个活动应该准备多少台机器&#xff0c;这个特点也深刻影响软件架构的…

航顺HK32F030M怎么样 航顺HK32F030M应用领域介绍

航顺HK32F030M是一款基于ARM Cortex-M0内核的32位微控制器&#xff0c;具有高性能、低功耗、经济适用等特点。以下是颖特新关于航顺HK32F030M的详细介绍&#xff1a; 一、性能表现 航顺HK32F030M采用ARM Cortex-M0内核&#xff0c;主频最高可达64MHz&#xff0c;具有出色的计算…

操作系统-笔记-第一章

目录 一、第一章——操作系统的概念 1、操作系统的概念、功能 &#xff08;1&#xff09;层次 &#xff08;2&#xff09;总结 2、操作系统的特征&#xff08;4个&#xff09; &#xff08;1&#xff09;并发与并行 &#xff08;2&#xff09;共享与互斥 &#xff08;3…

vite创建打包预览Vue3流程

本文章只是走了一下创建》运行》打包》预览打包效果的流程步骤&#xff0c;不包含创建后配置vue3项目和打包优化等。 1.使用vite创建vue3项目 创建项目命令&#xff1a; npm init vitelatest写完项目名称后回车 键盘上下键选择Vue构建 根据项目需求选择ts还是js 创建完成 根…

在docker中安装nacos,很详细

在docker中安装nacos&#xff0c;很详细 一、安装docker二、拉取nacos镜像1、查看有那些nacos镜像2、获取最新版本镜像3、获取指定版本的镜像4、查看本地镜像5、删除镜像 三、创建挂载目录1、创建nacos配置文件挂载目录2、创建nacos日志文件挂载目录3、创建nacos数据文件挂载目…

大数据分析案例-基于KMeans和DBSCAN算法对汽车行业客户进行聚类分群

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

W6100-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W6100-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…

安全问题「一锅端」,数据安全风险评估落地实践

数据安全风险评估是《数据安全法》明确的数据安全基础制度之一&#xff0c;也是重要数据处理者应尽的数据安全保护义务。今年5月&#xff0c;《网络安全标准实践指南—网络数据安全风险评估实施指引》发布&#xff0c;作为数据安全领域的一项重磅级指引&#xff0c;明确提出了网…

接口测试及接口抓包常用的测试工具

接口 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 接口测试的重要性 是节省时间前后端不…

11. Docker Swarm(二)

1、前言 上一篇中我们利用Docker Swarm搭建了基础的集群环境。那么今天我们就来验证以下该集群的可用性。上一篇的示例中&#xff0c;我创建了3个实例副本&#xff0c;并且通过访问http://192.168.74.132:8080得到我们的页面。 2、验证高可用 1&#xff09;我们可以通过以下命…

arco-cli脚手架创建项目时,踩坑点及解决办法

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; arco-cli安装新建项目时&#xff0c;前期很顺利&#xff0c;参考官网示例&#xff0c;都没问题的&#xff01; arco创建arco-pro项目示例:https://arco.design/vue/docs/pro/start 如果遇见问题管方…

2023年8月中国数据库排行榜:TiDB 重夺榜眼,PolarDB 再进一位

斗力频催鼓、争都更少筹。 2023年8月的 墨天轮中国数据库流行度排行 在炎炎夏日中火热出炉&#xff0c;本月共有286个数据库参与排名。本月排行榜前十中&#xff0c;头部变动加剧。TiDB 发奋图强重夺榜眼&#xff0c;阿里云PolarDB 排名连续上升&#xff0c;其余数据库稳居原位…

代理模式【Proxy Pattern】

什么是代理模式呢&#xff1f;我很忙&#xff0c;忙的没空理你&#xff0c;那你要找我呢就先找我的代理人吧&#xff0c;那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧&#xff0c;那就是两个人具备同一个接口&#xff0c;代理人虽然不能干活&#xff0c;但是被 代…

数据结构与算法-链表(含经典面试题)

一 面试经典&#xff1a; 1. 如何设计一个LRU缓存淘汰算法&#xff1f;基础 思想&#xff1a;新加的点来了&#xff0c; 首先去链表里面遍历&#xff0c;如果找到了。删掉 然后插入到头部。头部就是最新的吧如果不在原来的链表里:如果有空间就插入头部。LRU有内存限制的&#x…

理解 Go 中的切片:append 操作的深入分析(篇2)

理解 Go 语言中 slice 的性质对于编程非常有益。下面&#xff0c;我将通过代码示例来解释切片在不同函数之间传递并执行 append 操作时的具体表现。 本篇为第 2 篇&#xff0c;当切片的容量 cap 不够时 func main() {// slice1 当前长度为 3&#xff0c;容量大小也为 3slice1 :…

探索Python中的函数和类:构建模块化和面向对象的程序

文章目录 &#x1f340;引言&#x1f340;函数&#xff1a;模块化编程的基石&#x1f340;类&#xff1a;面向对象编程的基石&#x1f340;函数和类的结合&#xff1a;构建高效的程序&#x1f340;简单的文字冒险游戏 &#x1f340;引言 Python作为一种多范式的编程语言&#x…

web图书管理系统Servlet+JSP+javabean+MySQL图书商城图书馆 源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 web图书管理系统ServletJSPjavabeanMySQL 系统有1权限…

用于100GB+、TB级大型数据集构建【2】--计算包Xarray-主要数据类型

引言&#xff1a; Xarray是一个性能出众的张量操作库&#xff0c;通常用于多通道的时间序列信号处理&#xff08;比如传感器信号&#xff09;。通常&#xff0c;在处理此类数据时&#xff0c;我认为您经常使用numpy的np.ndarray。但是&#xff0c;由于np.ndarray是一个简单的矩…

[保研/考研机试] KY103 2的幂次方 上海交通大学复试上机题 C++实现

题目链接&#xff1a; KY103 2的幂次方 https://www.nowcoder.com/share/jump/437195121691999575955 描述 Every positive number can be presented by the exponential form.For example, 137 2^7 2^3 2^0。 Lets present a^b by the form a(b).Then 137 is present…