前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

插件跟中间件比起来,后者影响的是路由请求本身,而插件影响的是 Nuxt 框架本身,框架主要由自身构建体系、Vue 和 Nitro 构成,所以插件影响的就是这三方面,本节包括如下内容:

  • 创建和注册插件;
  • 插件常见用例。

# 创建和注册插件

Nuxt3 会自动读取 plugins 目录下的文件注册为插件,并在创建 Vue 应用时加载它们。

# 创建插件

使用 defineNuxtPlugin() 声明一个插件,像下面这样:

javascript
复制代码// 唯一的参数是 NuxtApp 实例
export default defineNuxtPlugin(nuxtApp => {
  // Doing something with nuxtApp
  console.log(nuxtApp)
})
@前端进阶之旅: 代码已经复制到剪贴板

# 注册插件

前面提到 Nuxt3 会自动读取 plugins 目录下的文件并加载,但还是有一些细节需要大家了解:

  • 实际上只注册 plugins 目录下根文件和子目录下的 index 文件。

    • img
  • 插件的执行顺序可以用数字来控制,因为插件之间可能有依赖关系。

    • img
  • 可在文件名上使用 .server 或 .client 后缀使插件仅作用于服务端或者客户端。

    • vbscript
      复制代码plugins/
      | - server-plugin.server.ts
      | - client-plugin.client.ts
      
      @前端进阶之旅: 代码已经复制到剪贴板

# Nuxt 上下文:NuxtApp

我们看到定义插件时,可以获取到 nuxtApp 对象,该对象是 NuxtApp 的实例,实际上是 Nuxt 提供的运行时上下文,可以同时用于客户端和服务端,并能帮我们访问 Vue实例、运行时钩子、运行时配置的变量、内部状态等。

我们需要了解 nuxtApp 一些重要的方法和属性以便使用:

  • provide (name, value):定义全局变量和方法;
  • hook(name, cb):定义 nuxt 钩子函数;
  • vueApp:获取 vue 实例;
  • ssrContext:服务端渲染时的上下文;
  • payload:从服务端到客户端传递的数据和状态;
  • isHydrating:用于检测是否正在客户端注水过程中。

# 常见插件用例

# 用例:使用 Nuxt 生命周期钩子

一个比较常见的插件用例是使用 Nuxt 生命周期钩子实现一些扩展功能,比如在前面的“错误处理”章节中,我们就曾利用插件编写生命周期处理错误的功能:

javascript
复制代码export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.hook('app:error', (..._args) => {
    console.log('app:error')
  })
  nuxtApp.hook('vue:error', (..._args) => {
    console.log('vue:error')
  })
})
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏