Nuxt3 的使用

134 阅读3分钟

Nuxt官网

Nuxt 优点

  • 支持Vue3& Vite
  • 更好的SEO(Nuxt 名牌)
  • 高开发效率
  • 支持多种部署方式

传统Spa

image.png 分批次请求,对服务器比较友好,首屏加载速度慢,

SSR

image.png

整体完整生成Html,服务器压力大,传输数据大,首屏加载速度快,

选择Nuxt

支持SEO,和Spa 两种模式,一般首屏使用seo,二级或者多级页面使用Spa

Nuxt 目录结构

.nuxt

编译生成的 vue程序

.output

为生产构建应用程序,Nuxt应用程序部署到生产环境,可以配置在不同服务器器上,比如node.js /GoLang(交给服务器去处理,前端只处理页面)

assets

存放vite 需要打包处理的资源如图片,字体.通常包含,Stylesheets,Fonts,Images

components

放置所有Vue组件,Nuxt 在编译时期,会把刺文件下面的组件,扫描加载,使用时,根据路径名预定组件名称使用,不需要额外的导入

| components/
--| TheHeader.vue
--| TheFooter.vue
--| view/
----| button.vue

使用:根据路径名驼峰引用

<ViewButton></ViewButton>
<TheHeader />
  <TheFooter />

##composables 数据组合,会自动导入,nuxi build 来生成类型,

| composables/
--| useFoo.js

export const useFoo = () => {
  return useState('foo', () => 'bar')
}

使用

 <p>
    {{ foo }}
 </p>

##content 系统管理文件,支持 .md, .yml .csv .json

包含功能:

  1. 内置组件渲染您的内容
  2. mongodb的API查询您的内容
  3. MDC语法的Markdown文件中的Vue组件
  4. 自动生成导航

添加依赖:

npm install --save-dev @nuxt/content

export default defineNuxtConfig({
  modules: [
    '@nuxt/content'
  ],
  content: {
    // https://content.nuxtjs.org/api/configuration
  }
})

使用

| content/
--| index.md

# Hello Content

渲染

 <main>
    <ContentDoc />
  </main>

layouts

外部通用布局,适合创建 BaseLayout,和包含形式的重用布局等

添加默认布局

-| layouts/ ---| default.vue ---| custom.vue

default/custom
<template>
  <div>
    一些在所有页面共享的默认布局
    <slot />// 页面包裹魔板
  </div>
</template>

直接引用NuxtLayout 默认布局就会引用到当前页面,多使用于BaseLayout 相关的页面 ,也可根据名字来更换默认布局

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>

<script setup>
// 您可以根据API调用或登录状态来选择此选项
const layout = "custom";
</script>

middleware

aop 的路由中间件框架,用来重新定向路由,多用于login 相关业务,或者通用信息过滤组件

-| middleware/
---| some-middleware.global.ts


export default defineNuxtRouteMiddleware((to, from) => {
  if (to.params.id === '2') {
    return abortNavigation('Insufficient permissions.')
  }else if(to.params.id === '1'){
    return navigateTo('/user-[admin]/3')
  }
})
  • return abortNavigation() - 停止当前导航
  • abortNavigation(error) - 拒绝有错误的当前导航
  • nothing - 不会阻塞导航,并且会移动到下一个中间件功能(如果有的话),或者完成路由导航

node_modules

存储项目的依赖项,类似Android 的依赖Lib ,如vue 等!

pages

页面展示,index.vue 会作为初始页面

使用

页面是Vue组件,可以使用 .vue

<template>
  <h1>Index page</h1>
</template>

如果使用app.vue 需要调用

<template>
    <div>
      <NuxtLayout>
        some page content
        <NuxtPage/>
      </NuxtLayout>
    </div>
  </template>

动态路由routers

-| pages/ ---| index.vue ---| users-[group]/ -----| [id].vue

根据上面的例子,你可以通过$route对象访问组件中的 group/id: pages/users-[group]/[id].vue

<template>
    <h1>heleo user</h1> 
    <div>
        <p>{{$route.params.id}}</p>
        <p>{{$route.params.group}}</p>
    </div>
</template>

嵌套路由

-| pages/
---| parent/
------| child.vue
---| parent.vue

要显示child.vue组件,你必须在pages/parent.vue中插入组件:

<template>
    <div>
        <h1>
            ppp
        </h1>
        <!-- 嵌套路由 -->
        <NuxtPage></NuxtPage>
    </div>
</template>

NuxtPage 将指引到 parent/child.vue

plugins

Nuxt自动读取您的plugins目录中的文件,并在创建Vue应用程序时加载它

插件信息导入

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

辅助信息使用

可以存储一些,token 或者长远存储数据

<template>
  <div>
    {{ $hello('world') }}
  </div>
</template>

<script setup lang="ts">
// alternatively, you can also use it here
const { $hello } = useNuxtApp()
</script>

public

public/目录直接服务于服务器根目录,包含必须保留其名称的公共文件(例如:robots.txt)或可能不会更改(例如:favicon.ico)。

server

具有HMR支持的API和服务器处理程序。主要服务端去管理和操作,前端知道就好

utils

工具类的使用,属于自动编译和导入。和插件组件类似加载

app.config

定义应用程序配置 配置

export default defineAppConfig({
  theme: {
    primaryColor: '#ababab'
  }
})

使用

const appConfig = useAppConfig()

console.log(appConfig.theme)

app.vue

由于pages 是可选的不是必须选择的,对于不需要路由页面的程序来说是非常有用的,

不使用pages

<template>
  <h1>Hello World!</h1>
</template>

使用Pages

<template>
  <div>
    <NuxtLayout>
      <NuxtPage/>
    </NuxtLayout>
  </div>
</template>

nuxt.config

nuxt 配置文件,需要热更的时候只需要,CS 进行保存,就会重启动服务,对于测试阶段比较有用

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: true },
  modules: [
    '@nuxt/content'
  ],
  content: {
    // https://content.nuxtjs.org/api/configuration
  }
})

package.json

Nuxt 的依赖脚本

Demo 地址

下面是根据本文介绍的demo,如果帮到你给个star nuxt3-demo