Зависимости от других модулей

Объявляйте зависимости от других модулей с ограничениями версий и слиянием конфигурации.

Если ваш модуль зависит от других модулей, объявите их через опцию 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 модуль не устанавливается автоматически, если он отсутствует. При этом overrides и defaults всё равно применяются, если модуль установлен где-то ещё.