nuxt3:我们开始吧!

news2024/12/23 16:38:45

一、背景介绍

2022 年 11 月 16 日,全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行,并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于 ViteVue3 和 Nitro 的 Nuxt 框架的现代重写,具有一流的 Typescript 支持,是两年多研究、社区反馈、创新和实验的结果。为每个人提供了一个愉快的 Vue 全栈开发体验。

因为nuxt优越的服务端渲染能力,所以对于nuxt3项目关注已久!我们开始吧!

二、官方网址

Nuxt 3 - 中文文档

Nuxt - The Intuitive Vue Framework

Announcing 3.0 · Nuxt

Nuxt - Installation

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

三、新特性介绍

1、更轻量:以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍
2、更快:基于 nitro 提供动态代码分割能力,以优化冷启动性能
3、Hybrid:增量静态生成和其他的高级功能现在都成为可能
4、Suspense:在任意组件和导航前后都可以获取数据
5、Composition API:使用 Composition API 和 Nuxt 3 的 composables 实现真正的代码复用
6、Nuxt CLI:没有任何依赖,帮你轻松搭建项目和集成模块
7、Nuxt Devtools:通过直接在浏览器中查看信息和快速修复实现更快地工作
8、Nuxt Kit:具有 Typescript 和跨版本兼容性的全新模块开发
9、Webpack 5:更快的构建时间和更小的包大小,无需配置
10、Vite:使用 Vite 作为打包工具,体验闪电般快速的 HMR
11、Vue 3:Vue 3 是你下一个 Web 应用程序的坚实基础
12、TypeScript:使用原生 TypeScript 和 ESM 构建,无需额外步骤

Nuxt 3.0 稳定版正式发布,基于 Vue 3 的 Web 框架

四、重要概念

SPA应用:也就是单页应用,这些多是在客户端的应用,不能进行SEO优化(搜索引擎优化)。

SSR应用:在服务端进行渲染,渲染完成后返回给客户端,每个页面有独立的URL,对SEO友好。

约定式路由:不需要配置路由,在根目录pages目录下创建业务页面,即可访问。

约定式配置:如layouts布局、middleware、plugins

五、启动基础项目

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

5.1、创建项目:

创建nuxt3项目:

pnpm dlx nuxi init nuxt-app

 npx nuxi init nuxt3-app

5.2、安装依赖

pnpm install --shamefully-hoist

5.3、启动项目

启动成功

六、项目配置、基础使用

6.1、访问pages/index.vue

根目录app.vue,<NuxtWelcome />替换为:<NuxtPage/>

<template>
  <NuxtPage/>
  <!-- <div>
    <NuxtWelcome />
  </div> -->
</template>

pages/index.vue

<template>
    <div>
        <h1>snow</h1>
    </div>
</template>

<script setup lang="ts">
</script>

<style scoped>
</style>

pages/about.vue  

<template>
    <div>
        <h1>about</h1>
    </div>
</template>

<script setup lang="ts">
</script>

<style scoped>
</style>

这样就可以访问页面了:

6.2、动态路由

6.2.1、目录结构

6.2.2、访问:/user

如果没有pages/user/index页面,只有[id].vue,访问的时候式404页面

6.2.3、访问:/user/1,动态路由,获取动态路由参数

{{$route.params.id}}

6.2.4、访问:/user/1?name=snow,动态路由,获取路由普通参数:

{{$route.query.name}}

 6.2.5、通过useRoute()获取路由信息

const route = useRoute()

<template>
    <div>
        <h1>user-id:{{$route.params.id}}</h1>
        <h1>user-name:{{$route.query.name}}</h1>
    </div>
</template>

<script setup lang="ts">
    const route = useRoute()
    console.log(route.params, route.query)
</script>

<style scoped>
</style>

6.3、路由跳转

经过测试一下几种方式均成功跳转。页面内容均正常展示。

6.3.1、

<NuxtLink to="/user/1">user-id</NuxtLink>

6.3.2、 

<a href="/user/2">user-id-2</a>

6.3.3、

<NuxtLink :to="{ path: `/user/${3}`}">user-id-3</NuxtLink>

6.3.4、编程式路由

<script setup lang="ts">

function toUser() {
    navigateTo({
        path: '/user/4',
        query: {
            name: 'snow'
        }
    })
}

</script>

6.4、加载静态资源

<div>
  <img src="~/assets/nginx.jpg" alt="nginx">
  <img src="~/public/nginx.jpg" alt="nginx">
</div>

 nuxt项目tsconfig.json有配置,public目录下的文件可以省略/public目录,我这里测试不可以,后续会再研究

6.5、设置页面title,不会在页面展示,只会在页面title部分展示

6.5.1、

<Title>snow-title</Title>

<template>
    <Title>snow-title</Title>
</template>

<script setup lang="ts">
</script>

<style scoped>
</style>

如图:

 ctrl + u:

 6.5.2、使用useHead()方法

useHead({
    title: 'snow-title-2'
})

设置成功,useHead优先级小于<Title>标签。

6.5.3、同理使用useHead设置页面的TDK信息

<script setup lang="ts">
useHead({
    title: 'snow-title-2',
    meta: [
        { name: 'description', content: 'snow-desc'},
        { name: 'keywords', content: 'snow-kw'}
    ]
})
</script>

6.6、layouts

6.6.1、理解:布局、页面布局、公共布局、基础布局

6.6.2、根目录创建layouts目录,/layouts/default.vue

<template>
    <div>
        snow-default-layout
    </div>
    <slot />
</template>

<script setup lang="ts">

</script>

<style scoped>

</style>

6.6.3、app.vue

<template>
  <NuxtLayout>
    <NuxtPage/>
  </NuxtLayout>
  <!-- <div>
    <NuxtWelcome />
  </div> -->
</template>

 6.6.4、

 6.6.5、某页面不想使用layout:

definePageMeta({
    layout: false
})

6.6.6、某页面使用指定layout

definePageMeta({
    layout: 'layout-snow'
})

  6.6.7、动态设置layout

const router = useRoute()
function enableLayout () {
    router.meta.layout = "layout-snow"
}

6.6.8、全局设置,指定layout

<template>
  <NuxtLayout :name="layoutSnow">
    <NuxtPage/>
  </NuxtLayout>
  <!-- <div>
    <NuxtWelcome />
  </div> -->
</template>
<script setup lang="ts">
const layoutSnow = ref("layout-snow")
</script>

6.7、plugins

/plugins/index.ts

export default defineNuxtPlugin(()=>{
    return {
        provide: {
            hello: (msg: string) => `hello ${msg}`
        }
    }
})

/pages/plugin.vue

<template>
    <div>
        snow-plugin
    </div>
</template>

<script setup lang="ts">
const { $hello } = useNuxtApp()
console.log('9', $hello('world'))
</script>

<style scoped>
</style>

6.8、middleware

/middleware/auth.ts

export default defineNuxtRouteMiddleware((to, from)=>{
    console.log("auth")
})

/middleware/snow.ts

export default defineNuxtRouteMiddleware((to, from)=>{
    console.log("snow")
})

/pages/plugin.vue

<template>
    <div>
        snow-plugin
    </div>
</template>

<script setup lang="ts">

definePageMeta({
    middleware: ["auth", "snow"]
})

</script>

<style scoped>
</style>

 如图:

6.9、封装接口请求

待补充

6.10、多环境开发

待补充

6.11、其他内容

待补充

七、过程记录

7.1、init项目不成功

解:墙内的同学可能创建不成功,这里推荐一个链接:https://github.com/nuxt/starter

7.2、useHead接收参数如下:

useHead(meta: Computable<MetaObject>): void

interface MetaObject extends Record<string, any> {
  charset?: string
  viewport?: string
  meta?: Array<Record<string, any>>
  link?: Array<Record<string, any>>
  style?: Array<Record<string, any>>
  script?: Array<Record<string, any>>
  noscript?: Array<Record<string, any>>
  titleTemplate?: string | ((title: string) => string)
  title?: string
  bodyAttrs?: Record<string, any>
  htmlAttrs?: Record<string, any>
}
charset: 指定 HTML 的字元编码,预设为 utf-8。
viewport: 设定网页的可见区域,预设为 width=device-width, initial-scale=1。
meta: 接受一个阵列,阵列中的每个元素,都將会建立一个 <meta> 标记,元素中物件的属性将对应至的属性。
link: 接受一个阵列,阵列中的每个元素,都将会建立一个 <link> 标记,元素中物件的属性将对应至的属性。
style: 接受一个阵列,阵列中的每個元素,都将会建立一个 <style> 标记,元素中物件的属性将对应至的属性。
script: 接受一个阵列,阵列中的每個元素,都将会建立一个 <script> 标记,元素中物件的属性将对应至的属性。
noscript: 接受一个阵列,阵列中的每個元素,都将会建立一个 <noscript> 标记,元素中物件的属性将对应至的属性。
titleTemplage: 接受一個字串或函數,用來动态的设定该页面元件的网页标题。
title: 在页面元件设置静态的网页标题。
bodyAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。
htmlAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。

理解useHead:相当于设置页面<head>标签内相关内容。

八、欢迎交流指正,关注我,一起学习。

 

参考链接:

[Day 24] Nuxt 3 搜尋引擎最佳化 (SEO) 與 HTML Meta Tag - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

Nuxt3-动态更改meta信息(关键词、标题、描述)_fat_shady的博客-CSDN博客

令人愉快的 Nuxt3 教程 (一): 应用的创建与配置 - 知乎

技术胖-Nuxt3从零到实战手把手 免费视频图文教程

Nuxt.js 3.0 正式发布! - 知乎

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

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

相关文章

深入浅出的给大家分析下现在做抖音短视频还来得及吗?

2500字&#xff0c;需要一些耐心用心读完&#xff0c;让自己对于未来更清晰一些&#xff01; 大家好&#xff0c;我是我赢助手短视频运营&#xff0c;专注于短视频运营和创作&#xff1b;今天给大家分享下现在还来得及做短视频吗&#xff1f;深入浅出的给大家分析下这个问题。…

加缪——人生到底有什么意义?生命的意义就是生命本身

核心问题&#xff1a;人生到底有什么意义&#xff1f;如果人生没有意义&#xff0c;那么人是否应该自杀&#xff1f; 如果不是&#xff0c;那么人要以什么样的态度活着&#xff1f; 目录 一、《局外人》 二、名言 三、「个人感悟」对活着意义的幡然醒悟 四、《西西弗神话》…

SpringBoot+Vue实现前后端分离的校园健康检测管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

整合Druid数据源

1.数据库连接池简介 数据库连接池是个容器&#xff0c;负责分配、管理数据库连接(Connection)。它允许应用程序重复使用一个现有的数据库连接&#xff0c;而不是再重新建立一个; 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。…

如何构建 API 生态促进企业上下游合作

构建 API 生态是互联网趋势 技术变革推动API数量爆发式增长 互联网在这10多年里&#xff0c;已经经历了多次的技术变革&#xff1a; 2010年以前&#xff0c;还是比较传统的开发模式。单体架构&#xff0c;自己开发大部分的代码&#xff0c;只有少量边缘业务会使用开源的项目代…

二肽Ile-Ala,24787-73-3,H2N-IA-OH

Forms nanotubes as its retroanalog H-Ala-Ile-OH 形成纳米管作为它的反模拟h - ala - il - oh。 编号: 196850中文名称: 二肽Ile-Ala英文名: Ile-AlaCAS号: 24787-73-3单字母: H2N-IA-OH三字母: H2N-Ile-Ala-COOH氨基酸个数: 2分子式: C9H18N2O3平均分子量: 202.25精确分子量…

PyCharm安装教程

PyCharm安装教程第一阶段&#xff1a;安装python第二阶段&#xff1a;安装pycharm第三阶段&#xff1a;新建python项目安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1JIbdnhupYLVHK6Q_fzNCcw?pwddvzo 提取码&#xff1a;dvzo 第一阶段&#xff1a;安装pyt…

2022CTF培训(四)花指令字符串混淆入门

附件下载链接 花指令 花指令的介绍 花指令(JunkCode)指的是使用一些技巧将代码复杂化&#xff0c;使人难以阅读的技术。广义上花指令与代码混淆(ObfusedCode)同义&#xff0c;包括结构混淆、分支混淆、语句膨胀等等 狭义上指的主要是干扰反汇编解析的技术。 花指令的原理 …

Sentinel规则持久化到Nacos教程

环境&#xff1a; 1、sentinel版本&#xff1a;1.8.6&#xff0c;下载地址&#xff1a;https://github.com/alibaba/Sentinel/releases/tag/1.8.6 2、nacos版本&#xff1a;2.1.2&#xff0c;下载地址&#xff1a;https://github.com/alibaba/nacos/releases 3、JDK版本&#x…

欧洲航天局(ESA)< ESA WorldCover 10m 2020 > 介绍

欧洲航天局&#xff08;ESA&#xff09;< ESA WorldCover 10m 2020 > 产品基于 Sentinel-1 和 Sentinel-2 数据提供了一种新的全球地表覆盖产品&#xff0c;分辨率为 10 米&#xff0c;时间为 2020 年。 该产品是在欧空局世界覆盖项目 < ESA WorldCover Project >的…

1. 认识复杂度和简单排序算法

1. 认识复杂度和简单排序算法 常数时间的操作&#xff0c;一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。 例子: int a arr[i];时间复杂度为一个算法流程中&#xff0c;常数操作数量的一个指标。常用O(读作big O)来…

基于随机森林、svm、CNN机器学习的风控欺诈识别模型

在信息爆炸时代&#xff0c;“信用”已成为越来越重要的无形财产。 ”数据风控“的实际意义是用DT&#xff08;Data Technology&#xff09;识别欺诈&#xff0c;将欺诈防患于未然&#xff0c;然后净化信用体系。 最近我们被客户要求撰写关于风控欺诈识别模型的研究报告&#x…

JavaScript基础语法(输出语句)

JavaScript基础语法&#xff08;输出语句&#xff09; 1.书写规范 区分大小写&#xff1a;与 Java 一样&#xff0c;变量名、函数名以及其他一切东西都是区分大小写的 每行结尾的分号可有可无 如果一行上写多个语句时&#xff0c;必须加分号用来区分多个语句。 注释 单行注释…

C++【IO流】

文章目录一、C语言的输入和输出二、C中的IO流自动类型识别scanf和cin等输入&#xff0c;都是通过空格或者换行分隔开来的多行测试用例如何写输入三、文件流ifstream读取文件读取文件中不同类型的数据一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()…

【附源码】计算机毕业设计JAVA政府采购线上招投标平台

【附源码】计算机毕业设计JAVA政府采购线上招投标平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JA…

SBT20100VDC-ASEMI超低压降、低功耗肖特基SBT20100VDC

编辑-Z SBT20100VDC在TO-263封装里采用的2个芯片&#xff0c;其尺寸都是87MIL&#xff0c;是一款超低压降 低功耗肖特基二极管。SBT20100VDC的浪涌电流Ifsm为180A&#xff0c;漏电流(Ir)为6uA&#xff0c;其工作时耐温度范围为-65~150摄氏度。SBT20100VDC采用金属硅芯片材质&a…

电磁仿真设计RMxprt-6p72s电励磁凸极同步电机分析案例

作者 | 电机设计青年 仿真秀专栏作者 导读&#xff1a;大家好&#xff0c;我是仿真秀专栏作者——电机设计青年&#xff0c;曾担任ANSYS低频电磁工程师一职&#xff0c;后入职电机企业&#xff0c;一直从事电机产品研发工作。研究的电机类型涉及电励磁同步电机、永磁同步电机、…

力扣 889. 根据前序和后序遍历构造二叉树

题目 给定两个整数数组&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一个具有 无重复 值的二叉树的前序遍历&#xff0c;postorder 是同一棵树的后序遍历&#xff0c;重构并返回二叉树。 如果存在多个答案&#xff0c;您可以返回其中 任何 一个。 示例 输…

MQ通道接收端绑定步骤

不同类型的绑定 IBM MQ 支持应用程序可以连接的两种方式&#xff1a; 1.本地绑定&#xff1a;这是当应用程序和队列管理器在同一个操作映像上时。 CHLAUTH 与此类应用程序连接无关。 2. 客户端绑定&#xff1a;这是应用程序和队列管理器使用网络进行通信的时候。 应用程序和队列…

DJ12-2-3 逻辑运算指令与移位指令

目录 1. 逻辑运算指令 &#xff08;1&#xff09;与 AND &#xff08;2&#xff09;或 OR &#xff08;3&#xff09;非 NOT &#xff08;4&#xff09;异或 XOR &#xff08;5&#xff09;测试 TEST 2. 移位指令 &#xff08;1&#xff09;非循环移位 &#xff08;2&…