diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index dc6aeb02..2c5722c9 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -25,7 +25,11 @@ export function createMarkdownToVueRenderFn( const md = createMarkdownRenderer(root, options) pages = pages.map((p) => slash(p.replace(/\.md$/, ''))) - return (src: string, file: string): MarkdownCompileResult => { + return ( + src: string, + file: string, + publicDir: string + ): MarkdownCompileResult => { const relativePath = slash(path.relative(root, file)) const cached = cache.get(src) @@ -56,7 +60,10 @@ export function createMarkdownToVueRenderFn( ? url.slice(1) : path.relative(root, path.resolve(dir, url)) ) - if (!pages.includes(resolved)) { + if ( + !pages.includes(resolved) && + !fs.existsSync(path.resolve(dir, publicDir, `${resolved}.html`)) + ) { console.warn( chalk.yellow( `\n(!) Found dead link ${chalk.cyan( diff --git a/src/node/plugin.ts b/src/node/plugin.ts index dbbff709..34f71405 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -1,5 +1,5 @@ import path from 'path' -import { Plugin } from 'vite' +import { Plugin, ResolvedConfig } from 'vite' import { SiteConfig, resolveSiteData } from './config' import { createMarkdownToVueRenderFn } from './markdownToVue' import { APP_PATH, SITE_DATA_REQUEST_PATH } from './alias' @@ -37,10 +37,15 @@ export function createVitePressPlugin( let siteData = site let hasDeadLinks = false + let config: ResolvedConfig const vitePressPlugin: Plugin = { name: 'vitepress', + configResolved(resolvedConfig) { + config = resolvedConfig + }, + config() { return { resolve: { @@ -72,7 +77,7 @@ export function createVitePressPlugin( transform(code, id) { if (id.endsWith('.md')) { // transform .md files into vueSrc so plugin-vue can handle it - const { vueSrc, deadLinks } = markdownToVue(code, id) + const { vueSrc, deadLinks } = markdownToVue(code, id, config.publicDir) if (deadLinks.length) { hasDeadLinks = true } @@ -176,7 +181,11 @@ export function createVitePressPlugin( // hot reload .md files as .vue files if (file.endsWith('.md')) { const content = await read() - const { pageData, vueSrc } = markdownToVue(content, file) + const { pageData, vueSrc } = markdownToVue( + content, + file, + config.publicDir + ) // notify the client to update page data server.ws.send({