From 74b81bbeaa492af0efee2da5b4a5639050938178 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 15 Nov 2022 13:22:14 +0000 Subject: [PATCH] refactor(kit)!: remove support for module container (#9010) --- docs/content/7.migration/20.module-authors.md | 2 +- packages/kit/src/index.ts | 1 - packages/kit/src/module/container.ts | 100 ------------------ packages/kit/src/module/install.ts | 8 +- packages/schema/src/types/module.ts | 43 +------- 5 files changed, 3 insertions(+), 151 deletions(-) delete mode 100644 packages/kit/src/module/container.ts diff --git a/docs/content/7.migration/20.module-authors.md b/docs/content/7.migration/20.module-authors.md index 75d4a5e721e..2d6f10183f1 100644 --- a/docs/content/7.migration/20.module-authors.md +++ b/docs/content/7.migration/20.module-authors.md @@ -22,7 +22,7 @@ By using [vue-demi](https://github.com/vueuse/vue-demi) they should be compatibl ## Module Migration -When Nuxt 3 users add your module, a compatible module container layer from `@nuxt/kit` is **automatically injected**, so as long as your code is following the guidelines below, it should continue working as-is. +When Nuxt 3 users add your module, you will not have access to the module container (`this.*`) so you will need to use utilities from `@nuxt/kit` to access the container functionality. ### Test with `@nuxt/bridge` diff --git a/packages/kit/src/index.ts b/packages/kit/src/index.ts index e5f991dee8f..5c05b74ed71 100644 --- a/packages/kit/src/index.ts +++ b/packages/kit/src/index.ts @@ -1,5 +1,4 @@ // Module -export * from './module/container' export * from './module/define' export * from './module/install' diff --git a/packages/kit/src/module/container.ts b/packages/kit/src/module/container.ts deleted file mode 100644 index 3d732695295..00000000000 --- a/packages/kit/src/module/container.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { relative } from 'pathe' -import type { Nuxt, ModuleContainer } from '@nuxt/schema' -import { chainFn } from '../internal/task' -import { addTemplate } from '../template' -import { addLayout } from '../layout' -import { isNuxt2 } from '../compatibility' -import { addPluginTemplate } from '../plugin' -import { useNuxt } from '../context' -import { installModule } from './install' - -const MODULE_CONTAINER_KEY = '__module_container__' - -export function useModuleContainer (nuxt: Nuxt = useNuxt()): ModuleContainer { - // @ts-ignore - if (nuxt[MODULE_CONTAINER_KEY]) { return nuxt[MODULE_CONTAINER_KEY] } - - async function requireModule (moduleOpts: any) { - let src, inlineOptions - if (typeof moduleOpts === 'string') { - src = moduleOpts - } else if (Array.isArray(moduleOpts)) { - [src, inlineOptions] = moduleOpts - } else if (typeof moduleOpts === 'object') { - if (moduleOpts.src || moduleOpts.handler) { - src = moduleOpts.src || moduleOpts.handler - inlineOptions = moduleOpts.options - } else { - src = moduleOpts - } - } else { - src = moduleOpts - } - await installModule(src, inlineOptions) - } - - const container: ModuleContainer = { - nuxt, - options: nuxt.options, - - ready () { return Promise.resolve() }, - addVendor () {}, - - requireModule, - addModule: requireModule, - - // TODO - addServerMiddleware: () => { }, - - addTemplate (template) { - if (typeof template === 'string') { - template = { src: template } - } - if (template.write === undefined) { - template.write = true - } - return addTemplate(template) - }, - - addPlugin (pluginTemplate) { - return addPluginTemplate(pluginTemplate) - }, - - addLayout (tmpl, name) { - return addLayout(tmpl, name) - }, - - addErrorLayout (dst) { - const relativeBuildDir = relative(nuxt.options.rootDir, nuxt.options.buildDir) - ;(nuxt as any).options.ErrorPage = `~/${relativeBuildDir}/${dst}` - }, - - extendBuild (fn) { - // @ts-ignore - nuxt.options.build.extend = chainFn(nuxt.options.build.extend, fn) - - if (!isNuxt2(nuxt)) { - console.warn('[kit] [compat] Using `extendBuild` in Nuxt 3 has no effect. Instead call extendWebpackConfig and extendViteConfig.') - } - }, - - extendRoutes (fn) { - if (isNuxt2(nuxt)) { - (nuxt.options.router as any).extendRoutes = chainFn((nuxt.options.router as any).extendRoutes, fn) - } else { - nuxt.hook('pages:extend', async (pages, ...args) => { - const maybeRoutes = await fn(pages, ...args) - if (maybeRoutes) { - console.warn('[kit] [compat] Using `extendRoutes` in Nuxt 3 needs to directly modify first argument instead of returning updated routes. Skipping extended routes.') - } - }) - } - } - } - - // @ts-ignore - nuxt[MODULE_CONTAINER_KEY] = container - - // @ts-ignore - return nuxt[MODULE_CONTAINER_KEY] -} diff --git a/packages/kit/src/module/install.ts b/packages/kit/src/module/install.ts index e27492e49f1..961ba37b687 100644 --- a/packages/kit/src/module/install.ts +++ b/packages/kit/src/module/install.ts @@ -2,7 +2,6 @@ import type { Nuxt, NuxtModule } from '@nuxt/schema' import { useNuxt } from '../context' import { resolveModule, requireModule, importModule } from '../internal/cjs' import { resolveAlias } from '../resolve' -import { useModuleContainer } from './container' /** Installs a module on a Nuxt instance. */ export async function installModule (moduleToInstall: string | NuxtModule, _inlineOptions?: any, _nuxt?: Nuxt) { @@ -10,12 +9,7 @@ export async function installModule (moduleToInstall: string | NuxtModule, _inli const { nuxtModule, inlineOptions } = await normalizeModule(moduleToInstall, _inlineOptions) // Call module - await nuxtModule.call( - // Provide this context for backwards compatibility with Nuxt 2 - useModuleContainer() as any, - inlineOptions, - nuxt - ) + await nuxtModule(inlineOptions, nuxt) nuxt.options._installedModules = nuxt.options._installedModules || [] nuxt.options._installedModules.push({ diff --git a/packages/schema/src/types/module.ts b/packages/schema/src/types/module.ts index 1a410fbe418..66c0af0d957 100644 --- a/packages/schema/src/types/module.ts +++ b/packages/schema/src/types/module.ts @@ -1,5 +1,5 @@ import { NuxtHooks } from './hooks' -import type { Nuxt, NuxtPluginTemplate, NuxtTemplate } from "./nuxt" +import type { Nuxt } from "./nuxt" import type { NuxtCompatibility } from './compatibility' export interface ModuleMeta { @@ -41,44 +41,3 @@ export interface NuxtModule { getOptions?: (inlineOptions?: T, nuxt?: Nuxt) => Promise getMeta?: () => Promise } - -/** -* Legacy ModuleContainer for backwards compatibility with Nuxt 2 module format. -*/ -export interface ModuleContainer { - nuxt: Nuxt - options: Nuxt['options'] - - /** @deprecated */ - ready(): Promise - - /** @deprecated */ - addVendor(): void - - /** Renders given template using lodash template during build into the project buildDir (`.nuxt`).*/ - addTemplate(template: string | NuxtTemplate): NuxtTemplate - - /** Registers a custom plugin. */ - addPlugin(template: NuxtPluginTemplate): NuxtPluginTemplate - - /** Registers a custom layout. If its name is 'error' it will override the default error layout. */ - addLayout(tmpl: NuxtTemplate, name: string): any - - /** Sets the layout that will render Nuxt errors. It should already have been added via addLayout or addTemplate. */ - addErrorLayout(dst: string): void - - /** Adds a new server middleware to the end of the server middleware array. */ - addServerMiddleware(arg1: any): void - - /** Allows extending webpack build config by chaining `options.build.extend` function. */ - extendBuild(fn: Function): void - - /** Allows extending routes by chaining `options.router.extendRoutes` function. */ - extendRoutes(fn: Function): void - - /** Registers a module. */ - requireModule(installOptions: any, opts: any): Promise - - /** Registers a module. */ - addModule(installOptions: any, opts: any): Promise -}