From fc905d10618011d17303303a819970cb1367af2f Mon Sep 17 00:00:00 2001 From: Hugo Matalonga Date: Fri, 4 May 2018 23:51:50 +0100 Subject: [PATCH] feat: register globally theme components (close #281) --- lib/prepare.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/prepare.js b/lib/prepare.js index 46b478de6f..054a75df01 100644 --- a/lib/prepare.js +++ b/lib/prepare.js @@ -245,16 +245,22 @@ async function resolveOptions (sourceDir) { return options } -async function genComponentRegistrationFile ({ sourceDir }) { - function genImport (file) { +async function genComponentRegistrationFile ({ sourceDir, themePath }) { + function genImport (file, ...componentDir) { const name = fileToComponentName(file) - const baseDir = path.resolve(sourceDir, '.vuepress/components') + const baseDir = path.resolve(...componentDir) 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') + const components = (await resolveComponents(sourceDir, '.vuepress/components')) || [] + const themeComponents = (await resolveComponents(themePath, 'components')) || [] + const componentsStr = + components.map(f => genImport(f, sourceDir, '.vuepress/components')).join('\n') + const themeComponentsStr = + themeComponents.map(f => genImport(f, themePath, 'components')).join('\n') + + return `import Vue from 'vue'\n${componentsStr}\n${themeComponentsStr}` } const indexRE = /(^|.*\/)(index|readme)\.md$/i @@ -287,8 +293,8 @@ function isIndexFile (file) { return indexRE.test(file) } -async function resolveComponents (sourceDir) { - const componentDir = path.resolve(sourceDir, '.vuepress/components') +async function resolveComponents (...sourceDir) { + const componentDir = path.resolve(...sourceDir) if (!fs.existsSync(componentDir)) { return }