fix: detect public folder for dead link (#290)

* fix: detect public folder for dead link

* perf: use config.publicDir replace 'public'
pull/312/head
云游君 3 years ago committed by GitHub
parent 3d16420940
commit 3aa185fa9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -25,7 +25,11 @@ export function createMarkdownToVueRenderFn(
const md = createMarkdownRenderer(root, options) const md = createMarkdownRenderer(root, options)
pages = pages.map((p) => slash(p.replace(/\.md$/, ''))) 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 relativePath = slash(path.relative(root, file))
const cached = cache.get(src) const cached = cache.get(src)
@ -56,7 +60,10 @@ export function createMarkdownToVueRenderFn(
? url.slice(1) ? url.slice(1)
: path.relative(root, path.resolve(dir, url)) : 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( console.warn(
chalk.yellow( chalk.yellow(
`\n(!) Found dead link ${chalk.cyan( `\n(!) Found dead link ${chalk.cyan(

@ -1,5 +1,5 @@
import path from 'path' import path from 'path'
import { Plugin } from 'vite' import { Plugin, ResolvedConfig } from 'vite'
import { SiteConfig, resolveSiteData } from './config' import { SiteConfig, resolveSiteData } from './config'
import { createMarkdownToVueRenderFn } from './markdownToVue' import { createMarkdownToVueRenderFn } from './markdownToVue'
import { APP_PATH, SITE_DATA_REQUEST_PATH } from './alias' import { APP_PATH, SITE_DATA_REQUEST_PATH } from './alias'
@ -37,10 +37,15 @@ export function createVitePressPlugin(
let siteData = site let siteData = site
let hasDeadLinks = false let hasDeadLinks = false
let config: ResolvedConfig
const vitePressPlugin: Plugin = { const vitePressPlugin: Plugin = {
name: 'vitepress', name: 'vitepress',
configResolved(resolvedConfig) {
config = resolvedConfig
},
config() { config() {
return { return {
resolve: { resolve: {
@ -72,7 +77,7 @@ export function createVitePressPlugin(
transform(code, id) { transform(code, id) {
if (id.endsWith('.md')) { if (id.endsWith('.md')) {
// transform .md files into vueSrc so plugin-vue can handle it // 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) { if (deadLinks.length) {
hasDeadLinks = true hasDeadLinks = true
} }
@ -176,7 +181,11 @@ export function createVitePressPlugin(
// hot reload .md files as .vue files // hot reload .md files as .vue files
if (file.endsWith('.md')) { if (file.endsWith('.md')) {
const content = await read() 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 // notify the client to update page data
server.ws.send({ server.ws.send({

Loading…
Cancel
Save