At a low level, a Nuxt module definition is a simple, potentially asynchronous, function accepting inline user options and a nuxt object to interact with Nuxt.
export default function (inlineOptions, nuxt) { // You can do whatever you like here.. console.log(inlineOptions.token) // `123` console.log(nuxt.options.dev) // `true` or `false` nuxt.hook('ready', (nuxt) => { console.log('Nuxt is ready') })}
Instead, to define a module, we recommend using the object-syntax with meta property to identify your module, especially when publishing to npm.This helper makes writing Nuxt modules more straightforward by implementing many common patterns needed by modules, guaranteeing future compatibility and improving the experience for both module authors and users.
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: {}, // Configuration for other modules moduleDependencies: { 'some-module': { // Version constraint for the module version: '>=2', // By default moduleDependencies will be added to the list of modules optional: true, // Configuration overrides overrides: {}, // Default configuration defaults: {}, }, }, // The function holding your module logic, it can be asynchronous setup (moduleOptions, nuxt) { // ... },})
defineNuxtModule returns a wrapper function with the lower level (inlineOptions, nuxt) module signature. This wrapper function applies defaults and other necessary steps before calling your setup function:
Support defaults and meta.configKey for automatically merging module options
Type hints and automated type inference
Ensure module gets installed only once using a unique key computed from meta.name or meta.configKey
Automatically register Nuxt hooks
Automatically check for compatibility issues based on module meta
Expose getOptions and getMeta for internal usage of Nuxt
Ensuring backward and upward compatibility as long as the module is using defineNuxtModule from the latest version of @nuxt/kit
When using the starter, the runtime directory is src/runtime/.
Modules, like everything in a Nuxt configuration, aren’t included in your application runtime. However, you might want your module to provide, or inject runtime code to the application it’s installed on. That’s what the runtime directory enables you to do.
Published modules cannot leverage auto-imports for assets within their runtime directory. Instead, they have to import them explicitly from #imports or alike.Auto-imports are not enabled for files within node_modules (the location where a published module will eventually live) for performance reasons.