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)
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(

@ -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({

Loading…
Cancel
Save