I import the defineNitroPlugin from '#build/types/nitro-imports' to create a nitro plugin. My nitro plugin code is shown below. I then register the plugin in my module.ts file. However, when I build the project I get an error by adding the nitro hook i.e. nitro.hook( etc.
//src/plugins/kafka-plugin.ts -- nitro plugin
import _ from 'lodash'
import { useRuntimeConfig } from '#imports
import { defineNitroPlugin } from '#build/types/nitro-imports';
import { kafkaFactory } from 'kafka-factory'
const kafkaFactoryInstance = (kafkaOptions: any) => {
return kafkaFactory(kafkaOptions)
};
export default defineNitroPlugin((nitroApp) => {
console.log('Nitro plugin', nitroApp)
const config = useRuntimeConfig()
nitroApp.hooks.hook('request', (event) => {
const kafkaOptions = config.public.kafkaOptions
const kafkaFactory = kafkaFactoryInstance(kafkaOptions)
event.context.kafkaFactory = kafkaFactory
})
})
Here is the module.ts file in src/module.ts
import { defineNuxtModule, createResolver } from '@nuxt/kit';
export default defineNuxtModule({
meta: {
name: 'kafka-module',
configKey: 'kakfaProperties',
},
defaults: {
kafkaOptions: {
appName: 'kafka-module',
// my kafka options...
},
},
setup(moduleOptions, nuxt) {
const { resolve } = createResolver(import.meta.url);
const nuxtOptions = nuxt.options;
const mergedOptions = _.merge(
nuxtOptions.runtimeConfig.public.kakfaProperties || {},
moduleOptions
);
nuxtOptions.runtimeConfig.public.kakfaProperties = mergedOptions;
// adding this makes it fail
nuxt.hook('nitro:config', (nitro) => {
// ensure `nitro.plugins` is initialized
nitro.plugins = nitro.plugins || []
// add your custom plugin
nitro.plugins.push(resolve('./plugins/kafka-plugin'))
})
}
});
When I run npm run prepack i.e. nuxt-module-build build, it fails with the following error. I added the code to register the nitro plugin and then it to fail.
ERROR Vue app aliases are not allowed in server runtime. [importing #build/types/nitro-imports from ../src/plugins/kafka-plugin.ts] 7:08:41 AM [nitro 10:46:08 PM] ERROR Error: Could not load /Users/reuz/projects/kafka-module/playground/.nuxt/types/nitro-imports (imported by src/plugins/kafka-plugin.ts): ENOENT: no such file or directory, open '/Users/reuz/projects/kafka-module/playground/.nuxt/types/nitro-imports'
Why is it failing even though defineNitroPlugin is in the package? I do not know why it is looking for it in playground .nuxt folder. It also complains because I've imported the nitro package with Vue app aliases cannot be imported in server runtime. How then can I define the plugin?
I made the error of importing defineNuxtPlugin from '@nuxt/app' instead of '#imports' and that caused it to fail