【Nuxt3从入门到实战】巧用Nuxt插件机制,扩展强化Nuxt的利器!

开发 前端
本篇我们研究nuxt3的插件系统。通过插件系统,我们可以获取nuxt实例以及vue实例,这样我们有机会扩展nuxt或vue,比如引入一个UI库。

[[438473]]

前言

大家好,我是村长,欢迎关注我的公众号村长学前端和B站Young村长

上一篇写了Nuxt3状态共享,本篇我们研究nuxt3的插件系统。通过插件系统,我们可以获取nuxt实例以及vue实例,这样我们有机会扩展nuxt或vue,比如引入一个UI库。

plugins目录

Nuxt3会自动读取plugins目录下的文件并加载它们。我们可以在文件名上使用.server或者.client前缀使他们仅作用于服务端或者客户端。

创建插件

使用defineNuxtPlugin()注册一个插件:

  1. import { defineNuxtPlugin } from '#app' 
  2. // 唯一的参数是nuxt实例 
  3. export default defineNuxtPlugin(nuxtApp => { 
  4.   // Doing something with nuxtApp 
  5. }) 

插件用例:自动提供帮助方法

一个常见应用是给NuxtApp实例提供一些额外的帮助方法,我们可以通过编写一个插件,返回一个对象,在里面设置providekey,比如:

  1. import { defineNuxtPlugin } from '#app' 
  2.  
  3. export default defineNuxtPlugin(() => { 
  4.   return { 
  5.     provide: { 
  6.       hello: () => 'world' 
  7.     } 
  8.   } 
  9. }) 

使用这个helper,index.vue:

  1. // 会自动加上$前缀 
  2. const { $hello } = useNuxtApp(); 
  3. console.log($hello()) 

插件用例:访问Vue实例

如果想要扩展Vue,我们通常要访问Vue实例,引入Vue插件。在nuxt3中可以通过插件访问nuxtApp.vueApp.use(xxx)做到。

我们引入vue-devui试一下,前面我们曾经试图自动导入失败了,这里我们手动导入:

  1. npm i vue-devui 

创建一个插件vue-devui-plugin.ts:

  1. import { defineNuxtPlugin } from "#app"
  2. import { Button } from "vue-devui"
  3. import 'vue-devui/button/style.css' 
  4.  
  5. export default defineNuxtPlugin((nuxtApp) => { 
  6.   nuxtApp.vueApp.use(Button); 
  7. }); 

使用组件测试一下:

  1. <d-button>按钮</d-button> 

扩展

引入其他组件库尝试结果:

  • naive-ui按官方方式在SFC中直接使用组件 引入就报错,参见:https://github.com/TuSimple/naive-ui/issues/1427又找到了这个回答:https://github.com/TuSimple/naive-ui/issues/636#issuecomment-945990935不过这个解决方案关闭了vite,不是我喜欢的风格,仅供大家可以参考!
  1. import { NButton } from 'naive-ui' 
  1. <n-button>button</n-button> 
  • vant是可以的,不过暂时不知道样式如何按需引入,编写如下插件:可以看一下有赞官方有计划做一个next3+vant的demo
  1. import { defineNuxtPlugin } from "#app"
  2. import { Button } from 'vant'
  3. import 'vant/lib/index.css' 
  4. // 这里如果引入 vant/lib/button/index.css是没有效果的 
  5. export default defineNuxtPlugin((nuxtApp) => { 
  6.   nuxtApp.vueApp.use(Button) 
  7. }); 
  • element-plus官方有个starter项目:

https://github.com/element-plus/element-plus-nuxt-starter

只可惜也是全量引入,按需引入没交代,也明确了自动引入暂时支持不了。

配套视频

我专门录制了Nuxt3从入门到实战系列视频,爱看视频学习的小伙伴不要错过!

https://space.bilibili.com/480140591/channel/seriesdetail?sid=456250

Young村长的个人空间-哔哩哔哩:https://b23.tv/rfg5t64

 

责任编辑:武晓燕 来源: 村长学前端
相关推荐

2021-11-29 14:18:05

Nuxt3静态Nuxt2

2023-06-14 20:58:05

2023-01-26 00:56:41

Nuxt.js存储库开发

2023-06-24 22:12:23

2021-08-31 15:53:48

Nuxt 开箱服务

2023-05-18 09:00:39

Nuxt类型Nuxt 2

2024-01-31 12:13:22

2019-05-06 14:51:46

Node框架前端

2023-08-27 09:08:45

CLI工具Web

2023-06-24 23:11:07

2011-06-09 17:26:17

Qt 插件 API

2023-07-26 10:21:26

服务端组件客户端

2023-05-12 07:31:58

NuxtVue.js

2019-01-22 15:28:04

Javascriptvue.jsnuxt.js

2022-11-17 06:17:41

Nuxt 3.0.0Vue

2023-10-20 10:11:00

Nuxt 3.8前端

2021-06-22 06:52:46

Vite 插件机制Rollup

2009-12-11 10:29:03

PHP插件机制

2010-09-08 14:39:35

2021-04-30 09:32:38

服务端渲染SSR
点赞
收藏

51CTO技术栈公众号