diff --git a/module.cjs b/module.cjs index bd95f63f..dc988f91 100644 --- a/module.cjs +++ b/module.cjs @@ -6,21 +6,42 @@ module.exports = function (...args) { const pkg = require('./package.json') module.exports.defineNuxtConfig = (config = {}) => { - if (config.bridge !== false) { - // Add new handlers options - config.serverHandlers = config.serverHandlers || [] - config.devServerHandlers = config.devServerHandlers || [] - - config.bridge = config.bridge || {} - config.bridge._version = pkg.version - if (!config.buildModules) { - config.buildModules = [] - } - if (!config.buildModules.find(m => m === '@nuxt/bridge' || m === '@nuxt/bridge-edge')) { - // Ensure other modules register their hooks before - config.buildModules.push('@nuxt/bridge') - } + // Nuxt kit depends on this flag to check bridge compatibility + config.bridge = config.bridge ?? true + + if (!config.bridge) { return config } + + // Add new handlers options + config.serverHandlers = config.serverHandlers || [] + config.devServerHandlers = config.devServerHandlers || [] + + config.bridge = config.bridge || {} + config.bridge._version = pkg.version + if (!config.buildModules) { + config.buildModules = [] } + if (!config.buildModules.find(m => m === '@nuxt/bridge' || m === '@nuxt/bridge-edge')) { + // Ensure other modules register their hooks before + config.buildModules.push('@nuxt/bridge') + } + config.buildModules.unshift(async function () { + const nuxt = this.nuxt + + const { nuxtCtx } = await import('@nuxt/kit') + + // Allow using kit composables in all modules + if (nuxtCtx.use()) { + nuxtCtx.unset() + } + nuxtCtx.set(nuxt) + + // Mock _layers for nitro and auto-imports + nuxt.options._layers = nuxt.options._layers || [{ + config: nuxt.options, + cwd: nuxt.options.rootDir, + configFile: nuxt.options._nuxtConfigFile + }] + }) return config } diff --git a/src/module.ts b/src/module.ts index f4f1ebbb..8b9d7949 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,5 +1,5 @@ import { createRequire } from 'module' -import { defineNuxtModule, installModule, checkNuxtCompatibility, nuxtCtx } from '@nuxt/kit' +import { defineNuxtModule, installModule, checkNuxtCompatibility } from '@nuxt/kit' import type { NuxtModule } from '@nuxt/schema' import { NuxtCompatibility } from '@nuxt/schema' import type { BridgeConfig } from '../types' @@ -36,23 +36,8 @@ export default defineNuxtModule({ // Disable if users explicitly set to false if ((nuxt.options as any).bridge === false) { return } - // Nuxt kit depends on this flag to check bridge compatibility - (nuxt.options as any).bridge = (nuxt.options as any).bridge || true - const _require = createRequire(import.meta.url) - // Allow using kit composables in all modules - if (!nuxtCtx.use()) { - nuxtCtx.set(nuxt) - } - - // Mock _layers - nuxt.options._layers = nuxt.options._layers || [{ - config: nuxt.options, - cwd: nuxt.options.rootDir, - configFile: nuxt.options._nuxtConfigFile - }] - if (opts.nitro) { nuxt.hook('modules:done', async () => { await setupNitroBridge()