From 179ee621d99b3c14e2e098e3b786465cbeaeab9a Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Fri, 14 Nov 2025 08:21:59 +0530 Subject: [PATCH] fix: log dead links in dev mode too closes #4419 --- src/node/plugin.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 159e068c..7faeb182 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -221,6 +221,7 @@ export async function createVitePressPlugin( this.environment.mode === 'dev' && this.environment.name === 'client' ) { + logDeadLinks(deadLinks, siteConfig.logger, true) const payload: PageDataPayload = { path: `/${siteConfig.rewrites.map[relativePath] || relativePath}`, pageData @@ -238,15 +239,7 @@ export async function createVitePressPlugin( renderStart() { if (allDeadLinks.length > 0) { - allDeadLinks.forEach(({ url, file }, i) => { - siteConfig.logger.warn( - c.yellow( - `${i === 0 ? '\n\n' : ''}(!) Found dead link ${c.cyan( - url - )} in file ${c.white(c.dim(file))}` - ) - ) - }) + logDeadLinks(allDeadLinks, siteConfig.logger) siteConfig.logger.info( c.cyan( '\nIf this is expected, you can disable this check via config. Refer: https://vitepress.dev/reference/site-config#ignoredeadlinks\n' @@ -423,3 +416,22 @@ export async function createVitePressPlugin( await dynamicRoutesPlugin(siteConfig) ] } + +function logDeadLinks( + deadLinks: MarkdownCompileResult['deadLinks'], + logger: SiteConfig['logger'], + devMode = false +) { + const logged = new Set() + deadLinks.forEach(({ url, file }, i) => { + const key = `${file}:::${url}` + if (logged.has(key)) return + logged.add(key) + const prefix = '\n'.repeat(i === 0 ? (devMode ? 1 : 2) : 0) + logger.warn( + c.yellow( + `${prefix}(!) Found dead link ${c.cyan(url)} in file ${c.white(c.dim(file))}` + ) + ) + }) +}