diff --git a/CHANGELOG.md b/CHANGELOG.md index f1f6e422385f..0c8f12be592c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [0.21.3](https://github.com/vuejs/vitepress/compare/v0.21.2...v0.21.3) (2022-01-06) + +### Bug Fixes + +- prioritize vue installed in user project root ([9b3243b](https://github.com/vuejs/vitepress/commit/9b3243b75752209943af5b247f5d38e641d4ff6d)) + ## [0.21.2](https://github.com/vuejs/vitepress/compare/v0.21.1...v0.21.2) (2022-01-06) ## [0.21.1](https://github.com/vuejs/vitepress/compare/v0.21.0...v0.21.1) (2022-01-06) diff --git a/package.json b/package.json index dcfcf21c0648..7d2e39f8eb23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vitepress", - "version": "0.21.2", + "version": "0.21.3", "description": "Vite & Vue powered static site generator", "main": "dist/node/index.js", "typings": "types/index.d.ts", diff --git a/src/node/alias.ts b/src/node/alias.ts index 7b7aff211503..f7ef31a64011 100644 --- a/src/node/alias.ts +++ b/src/node/alias.ts @@ -14,13 +14,24 @@ export const DEFAULT_THEME_PATH = path.join(DIST_CLIENT_PATH, 'theme-default') export const SITE_DATA_ID = '@siteData' export const SITE_DATA_REQUEST_PATH = '/' + SITE_DATA_ID -export function resolveAliases(themeDir: string): AliasOptions { +const vueRuntimePath = 'vue/dist/vue.runtime.esm-bundler.js' + +export function resolveAliases(root: string, themeDir: string): AliasOptions { const paths: Record = { '/@theme': themeDir, '/@shared': SHARED_PATH, [SITE_DATA_ID]: SITE_DATA_REQUEST_PATH } + // prioritize vue installed in project root and fallback to + // vue that comes with vitepress itself. + let vuePath + try { + vuePath = require.resolve(vueRuntimePath, { paths: [root] }) + } catch (e) { + vuePath = require.resolve(vueRuntimePath) + } + const aliases: Alias[] = [ ...Object.keys(paths).map((p) => ({ find: p, @@ -40,7 +51,7 @@ export function resolveAliases(themeDir: string): AliasOptions { // vitepress itself { find: /^vue$/, - replacement: require.resolve('vue/dist/vue.runtime.esm-bundler.js') + replacement: vuePath } ] diff --git a/src/node/build/render.ts b/src/node/build/render.ts index 8bfe54d5beb7..e5e226e376e6 100644 --- a/src/node/build/render.ts +++ b/src/node/build/render.ts @@ -21,8 +21,20 @@ export async function renderPage( const routePath = `/${page.replace(/\.md$/, '')}` const siteData = resolveSiteDataByRoute(config.site, routePath) router.go(routePath) + // lazy require server-renderer for production build - const content = await require('vue/server-renderer').renderToString(app) + // prioritize project root over vitepress' own dep + let rendererPath + try { + rendererPath = require.resolve('vue/server-renderer', { + paths: [config.root] + }) + } catch (e) { + rendererPath = require.resolve('vue/server-renderer') + } + + // render page + const content = await require(rendererPath).renderToString(app) const pageName = page.replace(/\//g, '_') // server build doesn't need hash diff --git a/src/node/config.ts b/src/node/config.ts index 7a01377b20b6..7b337f547c5e 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -139,7 +139,7 @@ export async function resolveConfig( outDir, tempDir: resolve(root, '.temp'), markdown: userConfig.markdown, - alias: resolveAliases(themeDir), + alias: resolveAliases(root, themeDir), vue: userConfig.vue, vite: userConfig.vite, shouldPreload: userConfig.shouldPreload,