跳到主要内容

模块依赖

声明对其它模块的依赖,并带有版本约束和配置合并。

如果你的模块依赖其它模块,你可以使用 moduleDependencies 选项声明它们。Nuxt 随后会确保这些模块以正确的顺序安装、验证你提供的任何版本约束,并合并你为它们提供的配置。

基本用法

import { createResolver, defineNuxtModule } from '@nuxt/kit'

const resolver = createResolver(import.meta.url)

export default defineNuxtModule<ModuleOptions>({
  meta: {
    name: 'my-module',
  },
  moduleDependencies: {
    '@nuxtjs/tailwindcss': {
      // 你可以为模块指定版本约束
      version: '>=6',
      // 任何应覆盖 `nuxt.options` 的配置
      overrides: {
        exposeConfig: true,
      },
      // 任何应设置的配置。它会覆盖模块默认值,但
      // 不会覆盖在 `nuxt.options` 中设置的任何配置
      defaults: {
        config: {
          darkMode: 'class',
          content: {
            files: [
              resolver.resolve('./runtime/components/**/*.{vue,mjs,ts}'),
              resolver.resolve('./runtime/*.{mjs,js,ts}'),
            ],
          },
        },
      },
    },
  },
  setup (options, nuxt) {
    // 我们可以注入我们的 CSS 文件,其中包含了 Tailwind 的指令
    nuxt.options.css.push(resolver.resolve('./runtime/assets/styles.css'))
  },
})
moduleDependencies 选项取代了已废弃的 installModule 函数。

每个条目的键标识要依赖的模块。你可以使用 npm 包名、本地模块目录的路径,或 Nuxt 别名如 ~@

依赖本地模块

当依赖位于 modules/ 目录 中时,使用文件路径来声明依赖:

import { defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  moduleDependencies: {
    // 相对于项目根目录的路径
    './modules/my-local-module': {},
    // 或者使用 Nuxt 别名
    '~/modules/another-local-module': {},
  },
  // ...
})

相对路径是从你项目的 rootDir 解析的,而不是从声明依赖的文件解析的。位于 modules/foo.ts 的模块引用 modules/bar.ts 必须使用 './modules/bar',而不是 './bar'。使用 Nuxt 别名(如 ~/modules/bar)可以避免这种歧义。

选项

moduleDependencies 中的每个条目接受以下字段:

  • version:一个 semver 范围。如果解析到的模块版本不满足这个范围,Nuxt 会抛出错误。版本检查仅在依赖可以解析到一个 package.json 时才适用,因此对于项目本地模块它是一个空操作。
  • overrides:应用在 nuxt.options 之上的配置,优先于用户配置。
  • defaults:应用在 nuxt.options 之下的配置。用户配置优先于这些。
  • optional:如果为 true,当缺失时模块不会被自动安装。overridesdefaults 仍然会在模块被安装于其它位置时应用。