mirror of
https://github.com/wahyd4/vuepress.git
synced 2026-08-09 21:36:16 +10:00
75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
const path = require('path')
|
|
const { fileToComponentName, resolveComponents } = require('./util')
|
|
|
|
exports.genRoutesFile = async function ({
|
|
siteData: { pages },
|
|
sourceDir,
|
|
pageFiles
|
|
}) {
|
|
function genRoute ({ path: pagePath, key: componentName }, index) {
|
|
const file = pageFiles[index]
|
|
const filePath = path.resolve(sourceDir, file)
|
|
let code = `
|
|
{
|
|
name: ${JSON.stringify(componentName)},
|
|
path: ${JSON.stringify(pagePath)},
|
|
component: ThemeLayout,
|
|
beforeEnter: (to, from, next) => {
|
|
import(${JSON.stringify(filePath)}).then(comp => {
|
|
Vue.component(${JSON.stringify(componentName)}, comp.default)
|
|
next()
|
|
})
|
|
}
|
|
}`
|
|
|
|
const dncodedPath = decodeURIComponent(pagePath)
|
|
if (dncodedPath !== pagePath) {
|
|
code += `,
|
|
{
|
|
path: ${JSON.stringify(dncodedPath)},
|
|
redirect: ${JSON.stringify(pagePath)}
|
|
}`
|
|
}
|
|
|
|
if (/\/$/.test(pagePath)) {
|
|
code += `,
|
|
{
|
|
path: ${JSON.stringify(pagePath + 'index.html')},
|
|
redirect: ${JSON.stringify(pagePath)}
|
|
}`
|
|
}
|
|
|
|
return code
|
|
}
|
|
|
|
const notFoundRoute = `,
|
|
{
|
|
path: '*',
|
|
component: ThemeNotFound
|
|
}`
|
|
|
|
return (
|
|
`import ThemeLayout from '@themeLayout'\n` +
|
|
`import ThemeNotFound from '@themeNotFound'\n` +
|
|
`import { injectMixins } from '@app/util'\n` +
|
|
`import rootMixins from '@app/root-mixins'\n\n` +
|
|
`injectMixins(ThemeLayout, rootMixins)\n` +
|
|
`injectMixins(ThemeNotFound, rootMixins)\n\n` +
|
|
`export const routes = [${pages.map(genRoute).join(',')}${notFoundRoute}\n]`
|
|
)
|
|
}
|
|
|
|
exports.genComponentRegistrationFile = async function ({ sourceDir }) {
|
|
function genImport (file) {
|
|
const name = fileToComponentName(file)
|
|
const baseDir = path.resolve(sourceDir, '.vuepress/components')
|
|
const absolutePath = path.resolve(baseDir, file)
|
|
const code = `Vue.component(${JSON.stringify(name)}, () => import(${JSON.stringify(absolutePath)}))`
|
|
return code
|
|
}
|
|
|
|
const components = (await resolveComponents(sourceDir)) || []
|
|
return `import Vue from 'vue'\n` + components.map(genImport).join('\n')
|
|
}
|
|
|