From c61c07e304602075f9802f2653f8eed063cae1f8 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 15 Nov 2022 12:57:26 +0000 Subject: [PATCH 1/3] refactor(kit)!: remove support for module container --- packages/kit/src/module/install.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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({ From 48a0fcdb1021805fd507e26b7f283ce953d3ab08 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 15 Nov 2022 12:58:22 +0000 Subject: [PATCH 2/3] feat(kit): add `wrapLegacyModule` utility --- docs/content/3.api/4.advanced/2.kit.md | 1 + packages/kit/src/module/container.ts | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/content/3.api/4.advanced/2.kit.md b/docs/content/3.api/4.advanced/2.kit.md index 66fbcdeea7b..dd046282aa6 100644 --- a/docs/content/3.api/4.advanced/2.kit.md +++ b/docs/content/3.api/4.advanced/2.kit.md @@ -15,6 +15,7 @@ description: Nuxt Kit provides composable utilities to help interacting with Nux [source code](https://github.com/nuxt/framework/blob/main/packages/kit/src/module) - `installModule(module, inlineOptions)` +- `wrapLegacyModule(module)` ### Programmatic Usage diff --git a/packages/kit/src/module/container.ts b/packages/kit/src/module/container.ts index 3d732695295..23ab76f96e8 100644 --- a/packages/kit/src/module/container.ts +++ b/packages/kit/src/module/container.ts @@ -10,6 +10,13 @@ import { installModule } from './install' const MODULE_CONTAINER_KEY = '__module_container__' +export function wrapLegacyModule (nuxtModule: Function) { + return function (...args: any) { + const container = useModuleContainer() + return nuxtModule.call(container, ...args) + } +} + export function useModuleContainer (nuxt: Nuxt = useNuxt()): ModuleContainer { // @ts-ignore if (nuxt[MODULE_CONTAINER_KEY]) { return nuxt[MODULE_CONTAINER_KEY] } @@ -44,7 +51,7 @@ export function useModuleContainer (nuxt: Nuxt = useNuxt()): ModuleContainer { addModule: requireModule, // TODO - addServerMiddleware: () => { }, + addServerMiddleware: () => {}, addTemplate (template) { if (typeof template === 'string') { @@ -66,7 +73,7 @@ export function useModuleContainer (nuxt: Nuxt = useNuxt()): ModuleContainer { addErrorLayout (dst) { const relativeBuildDir = relative(nuxt.options.rootDir, nuxt.options.buildDir) - ;(nuxt as any).options.ErrorPage = `~/${relativeBuildDir}/${dst}` + ; (nuxt as any).options.ErrorPage = `~/${relativeBuildDir}/${dst}` }, extendBuild (fn) { From a9c1d0456c8de3ec34be48d2672ec45ace1f8990 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 15 Nov 2022 13:12:25 +0000 Subject: [PATCH 3/3] refactor: remove all module container code --- docs/content/3.api/4.advanced/2.kit.md | 1 - docs/content/7.migration/20.module-authors.md | 2 +- packages/kit/src/index.ts | 1 - packages/kit/src/module/container.ts | 107 ------------------ packages/schema/src/types/module.ts | 43 +------ 5 files changed, 2 insertions(+), 152 deletions(-) delete mode 100644 packages/kit/src/module/container.ts diff --git a/docs/content/3.api/4.advanced/2.kit.md b/docs/content/3.api/4.advanced/2.kit.md index dd046282aa6..66fbcdeea7b 100644 --- a/docs/content/3.api/4.advanced/2.kit.md +++ b/docs/content/3.api/4.advanced/2.kit.md @@ -15,7 +15,6 @@ description: Nuxt Kit provides composable utilities to help interacting with Nux [source code](https://github.com/nuxt/framework/blob/main/packages/kit/src/module) - `installModule(module, inlineOptions)` -- `wrapLegacyModule(module)` ### Programmatic Usage 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 23ab76f96e8..00000000000 --- a/packages/kit/src/module/container.ts +++ /dev/null @@ -1,107 +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 wrapLegacyModule (nuxtModule: Function) { - return function (...args: any) { - const container = useModuleContainer() - return nuxtModule.call(container, ...args) - } -} - -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/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 -}