From e2a784d7165ba2a564fd2ba310dff1c7f7e5575d Mon Sep 17 00:00:00 2001 From: ULIVZ <472590061@qq.com> Date: Fri, 10 Aug 2018 15:43:12 +0800 Subject: [PATCH] refactor: Extract default-theme-only webpack aliases --- .../@vuepress/core/lib/plugin-api/context.js | 8 +++++++ .../core/lib/prepare/resolveOptions.js | 8 ------- .../core/lib/prepare/resolvePlugin.js | 3 ++- .../core/lib/webpack/createBaseConfig.js | 4 ---- .../plugin-active-header-links/mixin.js | 3 +++ .../@vuepress/theme-default/enhanceApp.js | 3 --- packages/@vuepress/theme-default/index.js | 5 +++- .../@vuepress/theme-default/noopModule.js | 1 + packages/@vuepress/theme-default/plugin.js | 24 +++++++++++++++++++ packages/docs/docs/.vuepress/config.js | 4 +--- packages/docs/{ => docs}/README.md | 0 .../docs/docs/default-theme-config/README.md | 2 +- 12 files changed, 44 insertions(+), 21 deletions(-) delete mode 100644 packages/@vuepress/theme-default/enhanceApp.js create mode 100644 packages/@vuepress/theme-default/noopModule.js create mode 100644 packages/@vuepress/theme-default/plugin.js rename packages/docs/{ => docs}/README.md (100%) diff --git a/packages/@vuepress/core/lib/plugin-api/context.js b/packages/@vuepress/core/lib/plugin-api/context.js index 62f23d71..83d56b95 100644 --- a/packages/@vuepress/core/lib/plugin-api/context.js +++ b/packages/@vuepress/core/lib/plugin-api/context.js @@ -30,6 +30,14 @@ class PluginContext { get publicPath () { return this._options.publicPath } + + get themeConfig () { + return this._options.themeConfig + } + + get siteConfig () { + return this._options.siteConfig + } } Object.assign(PluginContext.prototype, { diff --git a/packages/@vuepress/core/lib/prepare/resolveOptions.js b/packages/@vuepress/core/lib/prepare/resolveOptions.js index f53c3af2..b17b7502 100644 --- a/packages/@vuepress/core/lib/prepare/resolveOptions.js +++ b/packages/@vuepress/core/lib/prepare/resolveOptions.js @@ -89,13 +89,6 @@ module.exports = async function resolveOptions (sourceDir) { // resolve theme config const themeConfig = siteConfig.themeConfig || {} - // resolve algolia - const isAlgoliaSearch = ( - themeConfig.algolia || - Object.keys(siteConfig.locales && themeConfig.locales || {}) - .some(base => themeConfig.locales[base].algolia) - ) - // resolve markdown const markdown = createMarkdown(siteConfig) @@ -122,7 +115,6 @@ module.exports = async function resolveOptions (sourceDir) { themeLayoutPath, themeNotFoundPath, themePlugins, - isAlgoliaSearch, markdown } diff --git a/packages/@vuepress/core/lib/prepare/resolvePlugin.js b/packages/@vuepress/core/lib/prepare/resolvePlugin.js index 191f8d4a..bf203380 100644 --- a/packages/@vuepress/core/lib/prepare/resolvePlugin.js +++ b/packages/@vuepress/core/lib/prepare/resolvePlugin.js @@ -8,13 +8,14 @@ const registerGlobalComponentsPlugin = require('../../../plugin-register-global- const activeHeaderLinksPlugin = require('../../../plugin-active-header-links/index') module.exports = function (options) { - const { siteConfig, themeConfig, sourceDir, themePath } = options + const { siteConfig, themeConfig, sourceDir, themePath, themePlugins } = options const pluginContext = new PluginContext(options) const plugin = new Plugin(pluginContext) plugin // user plugin .useByConfigs(siteConfig.plugins) + .useByConfigs(themePlugins) // built-in plugins .use(enhanceAppPlugin) .use(registerGlobalComponentsPlugin, { diff --git a/packages/@vuepress/core/lib/webpack/createBaseConfig.js b/packages/@vuepress/core/lib/webpack/createBaseConfig.js index 4a427bfd..4c349f46 100644 --- a/packages/@vuepress/core/lib/webpack/createBaseConfig.js +++ b/packages/@vuepress/core/lib/webpack/createBaseConfig.js @@ -44,10 +44,6 @@ module.exports = function createBaseConfig ({ .set('@app', path.resolve(__dirname, '../app')) .set('@temp', path.resolve(__dirname, '../app/.temp')) .set('@dynamic', path.resolve(__dirname, '../app/.temp/dynamic-modules')) - .set('@default-theme', path.resolve(__dirname, '../default-theme')) - .set('@AlgoliaSearchBox', isAlgoliaSearch - ? path.resolve(__dirname, '../default-theme/AlgoliaSearchBox.vue') - : path.resolve(__dirname, './noopModule.js')) .end() .extensions .merge(['.js', '.jsx', '.vue', '.json', '.styl']) diff --git a/packages/@vuepress/plugin-active-header-links/mixin.js b/packages/@vuepress/plugin-active-header-links/mixin.js index 6562c596..50658fa6 100644 --- a/packages/@vuepress/plugin-active-header-links/mixin.js +++ b/packages/@vuepress/plugin-active-header-links/mixin.js @@ -5,10 +5,12 @@ export default { mounted () { window.addEventListener('scroll', this.onScroll) }, + methods: { onScroll: throttle(function () { this.setActiveHash() }, 300), + setActiveHash () { const sidebarLinks = [].slice.call(document.querySelectorAll('.sidebar-link')) const anchors = [].slice.call(document.querySelectorAll('.header-anchor')) @@ -41,6 +43,7 @@ export default { } } }, + beforeDestroy () { window.removeEventListener('scroll', this.onScroll) } diff --git a/packages/@vuepress/theme-default/enhanceApp.js b/packages/@vuepress/theme-default/enhanceApp.js deleted file mode 100644 index c78abcc1..00000000 --- a/packages/@vuepress/theme-default/enhanceApp.js +++ /dev/null @@ -1,3 +0,0 @@ -export default ({ Vue }) => { - Vue.component('Badge', () => import('./components/Badge.vue')) -} diff --git a/packages/@vuepress/theme-default/index.js b/packages/@vuepress/theme-default/index.js index 3197b03e..d06ad675 100644 --- a/packages/@vuepress/theme-default/index.js +++ b/packages/@vuepress/theme-default/index.js @@ -1,8 +1,11 @@ const path = require('path') +const plugin = require('./plugin') // Theme API. module.exports = { layout: path.resolve(__dirname, 'src/Layout.vue'), notFound: path.resolve(__dirname, 'src/NotFound.vue'), - plugins: [] + plugins: [ + plugin + ] } diff --git a/packages/@vuepress/theme-default/noopModule.js b/packages/@vuepress/theme-default/noopModule.js new file mode 100644 index 00000000..b1c6ea43 --- /dev/null +++ b/packages/@vuepress/theme-default/noopModule.js @@ -0,0 +1 @@ +export default {} diff --git a/packages/@vuepress/theme-default/plugin.js b/packages/@vuepress/theme-default/plugin.js new file mode 100644 index 00000000..9fbf8c13 --- /dev/null +++ b/packages/@vuepress/theme-default/plugin.js @@ -0,0 +1,24 @@ +const path = require('path') + +module.exports = (options, context) => ({ + name: 'default-theme', + + chainWebpack (config, isServer) { + const { themeConfig, siteConfig } = context + + // resolve algolia + const isAlgoliaSearch = ( + themeConfig.algolia || + Object.keys(siteConfig.locales && themeConfig.locales || {}) + .some(base => themeConfig.locales[base].algolia) + ) + + config.resolve + .alias + .set('@default-theme', path.resolve('.')) + .set('@AlgoliaSearchBox', isAlgoliaSearch + ? path.resolve(__dirname, './src/AlgoliaSearchBox.vue') + : path.resolve(__dirname, './noopModule.js')) + .end() + } +}) diff --git a/packages/docs/docs/.vuepress/config.js b/packages/docs/docs/.vuepress/config.js index 2de5a74b..d491d23c 100644 --- a/packages/docs/docs/.vuepress/config.js +++ b/packages/docs/docs/.vuepress/config.js @@ -1,5 +1,4 @@ const testPlugin = require('../../../@vuepress/plugin-test/index') -const translationComparisonPlugin = require('../../../../../vuepress-plugin-translation-ui/src/index') module.exports = { dest: 'vuepress', @@ -29,8 +28,7 @@ module.exports = { serviceWorker: true, theme: 'default', plugins: [ - testPlugin, - translationComparisonPlugin + testPlugin ], themeConfig: { repo: 'vuejs/vuepress', diff --git a/packages/docs/README.md b/packages/docs/docs/README.md similarity index 100% rename from packages/docs/README.md rename to packages/docs/docs/README.md diff --git a/packages/docs/docs/default-theme-config/README.md b/packages/docs/docs/default-theme-config/README.md index 0b26ada3..25534766 100644 --- a/packages/docs/docs/default-theme-config/README.md +++ b/packages/docs/docs/default-theme-config/README.md @@ -12,7 +12,7 @@ All options listed on this page apply to the default theme only. If you are usin ## Homepage -The default theme provides a homepage layout (which is used on [the homepage of this very website](../../README.md)). To use it, specify `home: true` plus some other metadata in your root `README.md`'s [YAML front matter](../guide/markdown.md#front-matter). This is the actual data used on this site: +The default theme provides a homepage layout (which is used on [the homepage of this very website](../README.md)). To use it, specify `home: true` plus some other metadata in your root `README.md`'s [YAML front matter](../guide/markdown.md#front-matter). This is the actual data used on this site: ``` yaml ---