refactor: simplify client path mapping

pull/198/head
Evan You 4 years ago
parent f62f4a41ce
commit 4f0c90311f

@ -1,29 +0,0 @@
// exports in this file are exposed to themes and md files via 'vitepress'
// so the user can do `import { useRoute, useSiteData } from 'vitepress'`
// generic types
export type { Router, Route } from './router'
// theme types
export * from './theme'
// composables
export { useRouter, useRoute } from './router'
export { useSiteData } from './composables/siteData'
export { useSiteDataByRoute } from './composables/siteDataByRoute'
export { usePageData } from './composables/pageData'
export { useFrontmatter } from './composables/frontmatter'
// utilities
export { inBrowser, joinPath } from './utils'
// components
export { Content } from './components/Content'
import { ComponentOptions } from 'vue'
import _Debug from './components/Debug.vue'
const Debug = _Debug as ComponentOptions
export { Debug }
// default theme
export { default as DefaultTheme } from '../theme-default'

@ -1,2 +0,0 @@
<div id="app"></div>
<script type="module" src="/@app/index.js"></script>

@ -0,0 +1,29 @@
// exports in this file are exposed to themes and md files via 'vitepress'
// so the user can do `import { useRoute, useSiteData } from 'vitepress'`
// generic types
export type { Router, Route } from './app/router'
// theme types
export * from './app/theme'
// composables
export { useRouter, useRoute } from './app/router'
export { useSiteData } from './app/composables/siteData'
export { useSiteDataByRoute } from './app/composables/siteDataByRoute'
export { usePageData } from './app/composables/pageData'
export { useFrontmatter } from './app/composables/frontmatter'
// utilities
export { inBrowser, joinPath } from './app/utils'
// components
export { Content } from './app/components/Content'
import { ComponentOptions } from 'vue'
import _Debug from './app/components/Debug.vue'
const Debug = _Debug as ComponentOptions
export { Debug }
// default theme
export { default as DefaultTheme } from './theme-default'

@ -8,11 +8,10 @@
"lib": ["ESNext", "DOM"],
"types": ["vite"],
"paths": {
"/@theme/*": ["theme-default/*"],
"/@default-theme/*": ["theme-default/*"],
"/@shared/*": ["shared/*"],
"/@types/*": ["../../types/*"],
"vitepress": ["app/exports.ts"]
"/@theme/*": ["theme-default/*"],
"vitepress": ["index.ts"]
}
},
"include": [

@ -17,10 +17,6 @@ export const DEFAULT_THEME_PATH = path.join(
export const SITE_DATA_ID = '@siteData'
export const SITE_DATA_REQUEST_PATH = '/' + SITE_DATA_ID
// this is a path resolver that is passed to vite
// so that we can resolve custom requests that start with /@app or /@theme
// we also need to map file paths back to their public served paths so that
// vite HMR can send the correct update notifications to the client.
export function resolveAliases(
root: string,
themeDir: string,
@ -28,9 +24,7 @@ export function resolveAliases(
): AliasOptions {
const paths: Record<string, string> = {
...userConfig.alias,
'/@app': APP_PATH,
'/@theme': themeDir,
'/@default-theme': DEFAULT_THEME_PATH,
'/@shared': SHARED_PATH,
[SITE_DATA_ID]: SITE_DATA_REQUEST_PATH
}
@ -40,7 +34,10 @@ export function resolveAliases(
find: p,
replacement: paths[p]
})),
{ find: /^vitepress$/, replacement: `${APP_PATH}/exports.js` }
{
find: /^vitepress$/,
replacement: path.join(__dirname, '../client/index')
}
]
let isLinked = false

@ -77,12 +77,16 @@ export function createVitePressPlugin(
configureServer(server) {
// serve our index.html after vite history fallback
const indexPath = `/@fs/${path.join(APP_PATH, 'index.html')}`
return () => {
// @ts-ignore
server.app.use((req, _, next) => {
server.app.use((req, res, next) => {
if (req.url!.endsWith('.html')) {
req.url = indexPath
res.statusCode = 200
res.end(
`<div id="app"></div>\n` +
`<script type="module" src="/@fs/${APP_PATH}/index.js"></script>`
)
return
}
next()
})

Loading…
Cancel
Save