From 7223c704f3fa54ff4ed20b7606ba8db8e9aa86cc Mon Sep 17 00:00:00 2001 From: Olavo Date: Mon, 6 Aug 2018 17:22:13 -0300 Subject: [PATCH 1/3] added the ability to customize the default components directory --- lib/prepare/codegen.js | 4 ++-- lib/prepare/resolveOptions.js | 4 ++++ lib/prepare/util.js | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/prepare/codegen.js b/lib/prepare/codegen.js index 52e85355a2..1354585846 100644 --- a/lib/prepare/codegen.js +++ b/lib/prepare/codegen.js @@ -59,10 +59,10 @@ exports.genRoutesFile = async function ({ ) } -exports.genComponentRegistrationFile = async function ({ sourceDir }) { +exports.genComponentRegistrationFile = async function ({ sourceDir, componentsDir }) { function genImport (file) { const name = fileToComponentName(file) - const baseDir = path.resolve(sourceDir, '.vuepress/components') + const baseDir = path.resolve(sourceDir, componentsDir) const absolutePath = path.resolve(baseDir, file) const code = `Vue.component(${JSON.stringify(name)}, () => import(${JSON.stringify(absolutePath)}))` return code diff --git a/lib/prepare/resolveOptions.js b/lib/prepare/resolveOptions.js index 9b97ca8e85..2abc638149 100644 --- a/lib/prepare/resolveOptions.js +++ b/lib/prepare/resolveOptions.js @@ -173,11 +173,15 @@ module.exports = async function resolveOptions (sourceDir) { locales: siteConfig.locales } + // resolve components dir + const componentsDir = siteConfig.componentsDir || '.vuepress/components' + const options = { siteConfig, siteData, sourceDir, outDir, + componentsDir, publicPath: base, pageFiles, pagesData, diff --git a/lib/prepare/util.js b/lib/prepare/util.js index efa96cc9b7..71a20fc8b8 100644 --- a/lib/prepare/util.js +++ b/lib/prepare/util.js @@ -55,8 +55,8 @@ exports.isIndexFile = function (file) { return indexRE.test(file) } -exports.resolveComponents = async function (sourceDir) { - const componentDir = path.resolve(sourceDir, '.vuepress/components') +exports.resolveComponents = async function (sourceDir, componentsDir) { + const componentDir = path.resolve(sourceDir, componentsDir) if (!fs.existsSync(componentDir)) { return } From 942c7dffe3e08df88b2aa888944deb95b6e931f9 Mon Sep 17 00:00:00 2001 From: Olavo Date: Mon, 6 Aug 2018 17:33:11 -0300 Subject: [PATCH 2/3] fixed typo --- lib/prepare/codegen.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/prepare/codegen.js b/lib/prepare/codegen.js index 1354585846..09ae14b596 100644 --- a/lib/prepare/codegen.js +++ b/lib/prepare/codegen.js @@ -68,7 +68,7 @@ exports.genComponentRegistrationFile = async function ({ sourceDir, componentsDi return code } - const components = (await resolveComponents(sourceDir)) || [] + const components = (await resolveComponents(sourceDir, componentsDir)) || [] return `import Vue from 'vue'\n` + components.map(genImport).join('\n') } From eee8d64878612ef2cbdeaa6419572f6197963219 Mon Sep 17 00:00:00 2001 From: Olavo Date: Mon, 6 Aug 2018 17:36:18 -0300 Subject: [PATCH 3/3] added the ability to declare custom components with custom names in the config file --- lib/prepare/codegen.js | 19 ++++++++++++++----- lib/prepare/resolveOptions.js | 4 ++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/prepare/codegen.js b/lib/prepare/codegen.js index 09ae14b596..8da514394a 100644 --- a/lib/prepare/codegen.js +++ b/lib/prepare/codegen.js @@ -59,16 +59,25 @@ exports.genRoutesFile = async function ({ ) } -exports.genComponentRegistrationFile = async function ({ sourceDir, componentsDir }) { - function genImport (file) { +exports.genComponentRegistrationFile = async function ({ sourceDir, components, componentsDir }) { + function genFileImport (file) { const name = fileToComponentName(file) - const baseDir = path.resolve(sourceDir, componentsDir) + return genImport(name, file) + } + + function genCustomImport (component) { + const { name, file } = component + return genImport(name, file, true) + } + + function genImport (name, file, isCustomComponent = false) { + const baseDir = isCustomComponent ? path.resolve(sourceDir) : path.resolve(sourceDir, componentsDir) const absolutePath = path.resolve(baseDir, file) const code = `Vue.component(${JSON.stringify(name)}, () => import(${JSON.stringify(absolutePath)}))` return code } - const components = (await resolveComponents(sourceDir, componentsDir)) || [] - return `import Vue from 'vue'\n` + components.map(genImport).join('\n') + const componentsFromFolder = (await resolveComponents(sourceDir, componentsDir)) || [] + return `import Vue from 'vue'\n` + componentsFromFolder.map(genFileImport).join('\n') + components.map(genCustomImport).join('\n') } diff --git a/lib/prepare/resolveOptions.js b/lib/prepare/resolveOptions.js index 2abc638149..fd2875d6ff 100644 --- a/lib/prepare/resolveOptions.js +++ b/lib/prepare/resolveOptions.js @@ -176,6 +176,9 @@ module.exports = async function resolveOptions (sourceDir) { // resolve components dir const componentsDir = siteConfig.componentsDir || '.vuepress/components' + // resolve custom components + const components = siteConfig.components || [] + const options = { siteConfig, siteData, @@ -183,6 +186,7 @@ module.exports = async function resolveOptions (sourceDir) { outDir, componentsDir, publicPath: base, + components, pageFiles, pagesData, themePath,