【Nuxt3】modules目录和nuxt3模块的简单介绍

简言

记录下nuxt3项目中module的用法

modules目录

使用 modules/ 目录在应用程序中自动注册本地模块。

这是一个很好的地方,可以放置您在构建应用程序时开发的任何本地nuxt模块。

nuxt模块相当于npm包,可以发布到npm社区中

在modules/ 目录下的本地模块,会自动注册模块,无需在 nuxt.config.ts文件中注册。

自动注册的文件模式有:

  • modules/*/index.ts ,例如 modules/aa/index.ts
  • modules/*.ts , 例如 modules/one.ts

该目录和其他目录一样,按字母顺序(alphabetical orde)来注册的。

示例

该实例创建了一个名为hello的nuxt模块,然后添加了一个api路由。

启动 Nuxt 时,hello 模块将被注册,/api/hello 路由也将可用。

modules/hello/index.ts :

typescript 复制代码
// `nuxt/kit` is a helper subpath import you can use when defining local modules
// that means you do not need to add `@nuxt/kit` to your project's dependencies
import { createResolver, defineNuxtModule, addServerHandler } from 'nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: 'hello'
  },
  setup () {
    const { resolve } = createResolver(import.meta.url)

    // Add an API route
    addServerHandler({
      route: '/api/hello',
      handler: resolve('./runtime/api-route')
    })
  }
})

modules/hello/runtime/api-route.ts :

typescript 复制代码
export default defineEventHandler(() => {
  return { hello: 'world' }
})

nuxt模块

Nuxt 提供了一个模块系统,用于扩展框架核心并简化集成。

使用 Nuxt 开发生产级应用程序时,您可能会发现该框架的核心功能还不够。Nuxt 可以通过配置选项和插件进行扩展,但在多个项目中维护这些自定义功能可能会非常繁琐、重复和耗时。这些可以在模块里使用。

这也是 Nuxt 提供模块系统以扩展内核的原因之一。Nuxt 模块是异步函数,在使用 nuxi dev 在开发模式下启动 Nuxt 或使用 nuxi build 为生产模式构建项目时按顺序运行。它们可以覆盖模板、配置 webpack 加载器、添加 CSS 库并执行许多其他有用的任务。

最重要的是,Nuxt 模块可以在 npm 包中发布。这样,它们就可以在不同项目中重复使用,并与社区共享,从而帮助创建一个高质量附加组件的生态系统。

可以简单理解为nuxt类型的npm包,它可以为项目整体扩展很多内容(css、plugin等)。

配置模块

本地开发的模块可以放到modules目录下。

npm上的需要在nuxt.config.ts配置。

安装模块后,您可以将它们添加到 nuxt.config.ts 文件的 modules 属性下。模块开发者通常会提供额外的使用步骤和细节。

typescript 复制代码
export default defineNuxtConfig({
  modules: [
    // Using package name (recommended usage)
    '@nuxtjs/example',

    // Load a local module
    './modules/example',

    // Add module with inline-options
    ['./modules/example', { token: '123' }],

    // Inline module definition
    async (inlineOptions, nuxt) => { }
  ]
})

例如 :

安装 pinia.

首先npm安装pinia和 @pinia/nuxt。

然后在nuxt.config.ts配置使用即可正常使用。

bash 复制代码
npm install pinia @pinia/nuxt

开发模块

Nuxt 模块是使用 nuxi dev 在开发模式下启动 Nuxt 或使用 nuxi build 为生产构建项目时按顺序运行的功能。有了模块,您就可以封装、正确测试并以 npm 包的形式共享自定义解决方案,而无需在项目中添加不必要的模板,也无需更改 Nuxt 本身。
官网模块开发指南

我们可以考虑两种 Nuxt 模块:

  • 在 npm 上发布的模块--你可以在 Nuxt 网站上看到一些社区模块的列表。
  • "本地 "模块,它们存在于 Nuxt 项目本身,或者在 Nuxt 配置中内联,或者作为模块目录的一部分。

在底层,Nuxt 模块定义是一个简单的、可能是异步的函数,接受内联用户选项和 nuxt 对象,以便与 Nuxt 交互。

您可以使用 Nuxt Kit 提供的高层 defineNuxtModule 辅助程序为该函数获取类型提示支持。

typescript 复制代码
import { defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule((options, nuxt) => {
  nuxt.hook('pages:extend', pages => {
    console.log(`Discovered ${pages.length} pages`)
  })
})

官网不建议这样使用,它们建议使用带 meta 属性的 object-syntax 来标识模块,尤其是在发布到 npm 时。

typescript 复制代码
import { defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    // Usually the npm package name of your module
    name: '@nuxtjs/example',
    // The key in `nuxt.config` that holds your module options
    configKey: 'sample',
    // Compatibility constraints
    compatibility: {
      // Semver version of supported nuxt versions
      nuxt: '^3.0.0'
    }
  },
  // Default configuration options for your module, can also be a function returning those
  defaults: {},
  // Shorthand sugar to register Nuxt hooks
  hooks: {},
  // The function holding your module logic, it can be asynchronous
  setup(moduleOptions, nuxt) {
    // ...
  }
})

更多模块使用方法参考官网:nuxt3 moudules guide

结语

结束了。

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端