From c20f9b315ed2755698ee499f81b90f6e24191e83 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 20 Sep 2022 16:31:33 +0100 Subject: [PATCH 1/9] feat(nuxt): add hook debug mode --- packages/nuxt/src/app/plugins/debug.ts | 20 +++++++++++++++++++ packages/nuxt/src/core/nitro.ts | 5 +++++ packages/nuxt/src/core/nuxt.ts | 5 +++++ .../src/core/runtime/nitro/plugins/debug.ts | 13 ++++++++++++ packages/schema/src/config/_common.ts | 7 +++++-- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 packages/nuxt/src/app/plugins/debug.ts create mode 100644 packages/nuxt/src/core/runtime/nitro/plugins/debug.ts diff --git a/packages/nuxt/src/app/plugins/debug.ts b/packages/nuxt/src/app/plugins/debug.ts new file mode 100644 index 00000000000..fe1180eaf2e --- /dev/null +++ b/packages/nuxt/src/app/plugins/debug.ts @@ -0,0 +1,20 @@ +import { defineNuxtPlugin } from '#app' + +const wrapName = (event: string) => process.server ? `[nuxt] ${event}` : event + +export default defineNuxtPlugin((nuxtApp) => { + nuxtApp.hooks.beforeEach(({ name }) => { + console.time(wrapName(name)) + }) + + nuxtApp.hooks.afterEach(({ name, args }) => { + if (process.client) { + console.groupCollapsed(name) + console.timeLog(name, args) + console.groupEnd() + } + if (process.server) { + console.timeEnd(wrapName(name)) + } + }) +}) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 7273aadacd3..42a156f4a5d 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -129,6 +129,11 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { exclude: [/core[\\/]runtime[\\/]nitro[\\/]renderer/] })) + if (nuxt.options.debug) { + nitroConfig.plugins = nitroConfig.plugins || [] + nitroConfig.plugins.push(resolve(distDir, 'core/runtime/nitro/plugins/debug')) + } + // Extend nitro config with hook await nuxt.callHook('nitro:config', nitroConfig) diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 81305b82691..157c0aec309 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -183,6 +183,11 @@ async function initNuxt (nuxt: Nuxt) { addPlugin(resolve(nuxt.options.appDir, 'plugins/preload.server')) } + // Track components used to render for webpack + if (nuxt.options.debug) { + addPlugin(resolve(nuxt.options.appDir, 'plugins/debug')) + } + for (const m of modulesToInstall) { if (Array.isArray(m)) { await installModule(m[0], m[1]) diff --git a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts new file mode 100644 index 00000000000..837ebfe8a71 --- /dev/null +++ b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts @@ -0,0 +1,13 @@ +import type { NitroAppPlugin } from 'nitropack' + +const wrapName = (event: string) => process.server ? `[nitro] ${event}` : event + +export default function (nitro) { + nitro.hooks.beforeEach(({ name }) => { + console.time(wrapName(name)) + }) + + nitro.hooks.afterEach(({ name }) => { + console.timeEnd(wrapName(name)) + }) +} diff --git a/packages/schema/src/config/_common.ts b/packages/schema/src/config/_common.ts index ed043c8d541..b0a852494bf 100644 --- a/packages/schema/src/config/_common.ts +++ b/packages/schema/src/config/_common.ts @@ -148,12 +148,15 @@ export default defineUntypedSchema({ /** * Set to `true` to enable debug mode. + * + * At the moment, it prints out hook names and timings on the server, and + * logs hook arguments as well in the browser. * - * By default, it's only enabled in development mode. * @version 2 + * @version 3 */ debug: { - $resolve: async (val, get) => val ?? await get('dev') + $resolve: async (val, get) => val ?? false }, /** From 00415e15f5473633a2e06480403e4d549e4b0c8d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 20 Sep 2022 16:36:19 +0100 Subject: [PATCH 2/9] fix: remove unneeded condition --- packages/nuxt/src/core/runtime/nitro/plugins/debug.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts index 837ebfe8a71..a0135cb9c14 100644 --- a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts +++ b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts @@ -1,6 +1,6 @@ import type { NitroAppPlugin } from 'nitropack' -const wrapName = (event: string) => process.server ? `[nitro] ${event}` : event +const wrapName = (event: string) => `[nitro] ${event}` export default function (nitro) { nitro.hooks.beforeEach(({ name }) => { From c66f16f181ee1476b4cc03cb8d82b15ff1624c98 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 09:22:21 +0100 Subject: [PATCH 3/9] chore: upgrade hookable --- packages/nuxt/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index e1c3816f986..b2daa818662 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -54,7 +54,7 @@ "globby": "^13.1.2", "h3": "^0.7.21", "hash-sum": "^2.0.0", - "hookable": "^5.3.0", + "hookable": "^5.4.0", "knitwork": "^0.1.2", "magic-string": "^0.26.7", "mlly": "^0.5.16", diff --git a/yarn.lock b/yarn.lock index cb0f4199a83..214c77ec3a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8286,10 +8286,10 @@ __metadata: languageName: node linkType: hard -"hookable@npm:^5.2.2, hookable@npm:^5.3.0": - version: 5.3.0 - resolution: "hookable@npm:5.3.0" - checksum: 5a170b790fc472fae11cc8ebc7a1336e7063c3f0a9697cefb5b18d455fcda4d1eadf21c254a27c0625fbbe31f736fd662797c21e6425e9c8cf073182b2ecae7f +"hookable@npm:^5.2.2, hookable@npm:^5.3.0, hookable@npm:^5.4.0": + version: 5.4.0 + resolution: "hookable@npm:5.4.0" + checksum: 810376b27eab8a8c05684c2c4cb394c7837ac3cf7a91a63f0468cef908a87c982ab2f0320dce0bceaa5fac99006f361a113eb739d0ae3801a9137586b4707f0a languageName: node linkType: hard @@ -10942,7 +10942,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.21 hash-sum: ^2.0.0 - hookable: ^5.3.0 + hookable: ^5.4.0 knitwork: ^0.1.2 magic-string: ^0.26.7 mlly: ^0.5.16 From 5fa1f9151689ec9918102813e02f837c4cee6e82 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 11:03:23 +0100 Subject: [PATCH 4/9] refactor: migrate to hookable's `createDebugger` --- packages/nuxt/src/app/plugins/debug.ts | 19 ++++--------------- packages/nuxt/src/core/nitro.ts | 8 ++++++++ packages/nuxt/src/core/nuxt.ts | 12 ++++++++++-- .../src/core/runtime/nitro/plugins/debug.ts | 11 +++-------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/nuxt/src/app/plugins/debug.ts b/packages/nuxt/src/app/plugins/debug.ts index fe1180eaf2e..b04702a5204 100644 --- a/packages/nuxt/src/app/plugins/debug.ts +++ b/packages/nuxt/src/app/plugins/debug.ts @@ -1,20 +1,9 @@ +import { createDebugger } from 'hookable' import { defineNuxtPlugin } from '#app' -const wrapName = (event: string) => process.server ? `[nuxt] ${event}` : event - export default defineNuxtPlugin((nuxtApp) => { - nuxtApp.hooks.beforeEach(({ name }) => { - console.time(wrapName(name)) - }) - - nuxtApp.hooks.afterEach(({ name, args }) => { - if (process.client) { - console.groupCollapsed(name) - console.timeLog(name, args) - console.groupEnd() - } - if (process.server) { - console.timeEnd(wrapName(name)) - } + // @ts-expect-error remove in next version of hookable + createDebugger(nuxtApp.hooks, { + tag: 'nuxt app' }) }) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 42a156f4a5d..d76f2d88e7b 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -7,6 +7,7 @@ import { resolvePath } from '@nuxt/kit' import defu from 'defu' import fsExtra from 'fs-extra' import { toEventHandler, dynamicEventHandler } from 'h3' +import { createDebugger } from 'hookable' import { distDir } from '../dirs' import { ImportProtectionPlugin } from './plugins/import-protection' @@ -149,6 +150,13 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Connect hooks nuxt.hook('close', () => nitro.hooks.callHook('close')) + if (nuxt.options.debug) { + // @ts-expect-error remove in next version of hookable + const { close } = createDebugger(nitro.hooks, { + tag: 'nitro build' + }) + nitro.hooks.hook('close', close) + } // Setup handlers const devMiddlewareHandler = dynamicEventHandler() diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 157c0aec309..7975e48cd63 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,5 +1,5 @@ import { join, normalize, resolve } from 'pathe' -import { createHooks } from 'hookable' +import { createHooks, createDebugger } from 'hookable' import type { Nuxt, NuxtOptions, NuxtConfig, ModuleContainer, NuxtHooks } from '@nuxt/schema' import { loadNuxtConfig, LoadNuxtOptions, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule, addPlugin } from '@nuxt/kit' // Temporary until finding better placement @@ -183,7 +183,7 @@ async function initNuxt (nuxt: Nuxt) { addPlugin(resolve(nuxt.options.appDir, 'plugins/preload.server')) } - // Track components used to render for webpack + // Add nuxt app debugger if (nuxt.options.debug) { addPlugin(resolve(nuxt.options.appDir, 'plugins/debug')) } @@ -234,6 +234,14 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { const nuxt = createNuxt(options) + // TODO: parallel kit:compatibility calls in defineModule + // if (nuxt.options.debug) { + // // @ts-expect-error remove in next version of hookable + // createDebugger(nuxt.hooks, { + // tag: 'nuxt build' + // }) + // } + if (opts.ready !== false) { await nuxt.ready() } diff --git a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts index a0135cb9c14..41f909d2092 100644 --- a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts +++ b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts @@ -1,13 +1,8 @@ +import { createDebugger } from 'hookable' import type { NitroAppPlugin } from 'nitropack' -const wrapName = (event: string) => `[nitro] ${event}` - export default function (nitro) { - nitro.hooks.beforeEach(({ name }) => { - console.time(wrapName(name)) - }) - - nitro.hooks.afterEach(({ name }) => { - console.timeEnd(wrapName(name)) + createDebugger(nitro.hooks, { + tag: 'nitro app' }) } From ddb8d39b269821622b93d1ae31466dd56242d776 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 11:15:59 +0100 Subject: [PATCH 5/9] fix: default to process.env.DEBUG --- packages/schema/src/config/_common.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/schema/src/config/_common.ts b/packages/schema/src/config/_common.ts index b0a852494bf..2aa4b4d882c 100644 --- a/packages/schema/src/config/_common.ts +++ b/packages/schema/src/config/_common.ts @@ -1,5 +1,5 @@ import { join, resolve } from 'pathe' -import { isDevelopment } from 'std-env' +import { isDebug, isDevelopment } from 'std-env' import createRequire from 'create-require' import { pascalCase } from 'scule' import jiti from 'jiti' @@ -148,7 +148,7 @@ export default defineUntypedSchema({ /** * Set to `true` to enable debug mode. - * + * * At the moment, it prints out hook names and timings on the server, and * logs hook arguments as well in the browser. * @@ -156,7 +156,7 @@ export default defineUntypedSchema({ * @version 3 */ debug: { - $resolve: async (val, get) => val ?? false + $resolve: async (val, get) => val ?? isDebug }, /** From be96f2d73ac5ef62680239f2b98c979a2b9e6d19 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 11:40:55 +0100 Subject: [PATCH 6/9] refactor: pass debug option to nitro --- packages/nuxt/src/core/nitro.ts | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index d76f2d88e7b..051b87dbfaf 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -7,7 +7,6 @@ import { resolvePath } from '@nuxt/kit' import defu from 'defu' import fsExtra from 'fs-extra' import { toEventHandler, dynamicEventHandler } from 'h3' -import { createDebugger } from 'hookable' import { distDir } from '../dirs' import { ImportProtectionPlugin } from './plugins/import-protection' @@ -18,6 +17,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Resolve config const _nitroConfig = ((nuxt.options as any).nitro || {}) as NitroConfig const nitroConfig: NitroConfig = defu(_nitroConfig, { + debug: nuxt.options.debug, rootDir: nuxt.options.rootDir, workspaceDir: nuxt.options.workspaceDir, srcDir: nuxt.options.serverDir, @@ -130,11 +130,6 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { exclude: [/core[\\/]runtime[\\/]nitro[\\/]renderer/] })) - if (nuxt.options.debug) { - nitroConfig.plugins = nitroConfig.plugins || [] - nitroConfig.plugins.push(resolve(distDir, 'core/runtime/nitro/plugins/debug')) - } - // Extend nitro config with hook await nuxt.callHook('nitro:config', nitroConfig) @@ -150,13 +145,6 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Connect hooks nuxt.hook('close', () => nitro.hooks.callHook('close')) - if (nuxt.options.debug) { - // @ts-expect-error remove in next version of hookable - const { close } = createDebugger(nitro.hooks, { - tag: 'nitro build' - }) - nitro.hooks.hook('close', close) - } // Setup handlers const devMiddlewareHandler = dynamicEventHandler() From 2bf1e245454cb119e3ddf001bec0cb6bda16d8ee Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 11:41:57 +0100 Subject: [PATCH 7/9] fix: remove duplicate nitro plugin --- packages/nuxt/src/core/runtime/nitro/plugins/debug.ts | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 packages/nuxt/src/core/runtime/nitro/plugins/debug.ts diff --git a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts b/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts deleted file mode 100644 index 41f909d2092..00000000000 --- a/packages/nuxt/src/core/runtime/nitro/plugins/debug.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createDebugger } from 'hookable' -import type { NitroAppPlugin } from 'nitropack' - -export default function (nitro) { - createDebugger(nitro.hooks, { - tag: 'nitro app' - }) -} From 1a12c4e77f6df6f8ac7305f17d1766a4f3f85fb0 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 14 Oct 2022 12:11:07 +0100 Subject: [PATCH 8/9] refactor: remove unused import --- packages/nuxt/src/core/nuxt.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 7975e48cd63..20bdabf2552 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,5 +1,5 @@ import { join, normalize, resolve } from 'pathe' -import { createHooks, createDebugger } from 'hookable' +import { createHooks } from 'hookable' import type { Nuxt, NuxtOptions, NuxtConfig, ModuleContainer, NuxtHooks } from '@nuxt/schema' import { loadNuxtConfig, LoadNuxtOptions, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule, addPlugin } from '@nuxt/kit' // Temporary until finding better placement From 4a1759be24bde7288aea46008f292dd228899d45 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Sat, 15 Oct 2022 12:51:15 +0200 Subject: [PATCH 9/9] update hookable --- packages/nuxt/package.json | 2 +- packages/nuxt/src/app/plugins/debug.ts | 5 +---- packages/nuxt/src/core/nuxt.ts | 12 ++++-------- yarn.lock | 9 ++++++++- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index b2daa818662..d706549f218 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -54,7 +54,7 @@ "globby": "^13.1.2", "h3": "^0.7.21", "hash-sum": "^2.0.0", - "hookable": "^5.4.0", + "hookable": "^5.4.1", "knitwork": "^0.1.2", "magic-string": "^0.26.7", "mlly": "^0.5.16", diff --git a/packages/nuxt/src/app/plugins/debug.ts b/packages/nuxt/src/app/plugins/debug.ts index b04702a5204..e0c67f2b863 100644 --- a/packages/nuxt/src/app/plugins/debug.ts +++ b/packages/nuxt/src/app/plugins/debug.ts @@ -2,8 +2,5 @@ import { createDebugger } from 'hookable' import { defineNuxtPlugin } from '#app' export default defineNuxtPlugin((nuxtApp) => { - // @ts-expect-error remove in next version of hookable - createDebugger(nuxtApp.hooks, { - tag: 'nuxt app' - }) + createDebugger(nuxtApp.hooks, { tag: 'nuxt-app' }) }) diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 20bdabf2552..801311d62cc 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,5 +1,5 @@ import { join, normalize, resolve } from 'pathe' -import { createHooks } from 'hookable' +import { createHooks, createDebugger } from 'hookable' import type { Nuxt, NuxtOptions, NuxtConfig, ModuleContainer, NuxtHooks } from '@nuxt/schema' import { loadNuxtConfig, LoadNuxtOptions, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule, addPlugin } from '@nuxt/kit' // Temporary until finding better placement @@ -234,13 +234,9 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { const nuxt = createNuxt(options) - // TODO: parallel kit:compatibility calls in defineModule - // if (nuxt.options.debug) { - // // @ts-expect-error remove in next version of hookable - // createDebugger(nuxt.hooks, { - // tag: 'nuxt build' - // }) - // } + if (nuxt.options.debug) { + createDebugger(nuxt.hooks, { tag: 'nuxt' }) + } if (opts.ready !== false) { await nuxt.ready() diff --git a/yarn.lock b/yarn.lock index c03e61cfdd9..f3e05a5f3f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8380,6 +8380,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^5.4.1": + version: 5.4.1 + resolution: "hookable@npm:5.4.1" + checksum: 2a48150436bf70b4b756bcf15694809032c490c1747aba363a6de928a96712e808b0918de06c933e082cc2042c3f051b593d400df6af4773cd9ad1e85d677839 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -11029,7 +11036,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.21 hash-sum: ^2.0.0 - hookable: ^5.4.0 + hookable: ^5.4.1 knitwork: ^0.1.2 magic-string: ^0.26.7 mlly: ^0.5.16