diff --git a/package.json b/package.json index ed3e9877..a8760d44 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "prismjs": "^1.20.0", "sirv": "^1.0.10", "slash": "^3.0.0", - "vite": "^2.0.0-alpha.1", + "vite": "^2.0.0-alpha.2", "vue": "^3.0.4" }, "devDependencies": { diff --git a/src/client/app/exports.ts b/src/client/app/exports.ts index 21ee2965..6012598b 100644 --- a/src/client/app/exports.ts +++ b/src/client/app/exports.ts @@ -24,3 +24,6 @@ import { ComponentOptions } from 'vue' import _Debug from './components/Debug.vue' const Debug = _Debug as ComponentOptions export { Debug } + +// default theme +export { default as DefaultTheme } from '../theme-default' diff --git a/src/node/alias.ts b/src/node/alias.ts index 8d6ab6fb..50f59a45 100644 --- a/src/node/alias.ts +++ b/src/node/alias.ts @@ -1,7 +1,8 @@ import path from 'path' -import { AliasOptions } from 'vite' +import { Alias, AliasOptions } from 'vite' import { UserConfig } from './config' +const PKG_ROOT = path.join(__dirname, '../../') export const APP_PATH = path.join(__dirname, '../client/app') export const SHARED_PATH = path.join(__dirname, '../client/shared') export const DEFAULT_THEME_PATH = path.join( @@ -20,17 +21,47 @@ export const SITE_DATA_REQUEST_PATH = '/' + SITE_DATA_ID // so that we can resolve custom requests that start with /@app or /@theme // we also need to map file paths back to their public served paths so that // vite HMR can send the correct update notifications to the client. -export function createAlias( +export function resolveAliases( + root: string, themeDir: string, userConfig: UserConfig ): AliasOptions { - return { + const paths: Record = { ...userConfig.alias, '/@app': APP_PATH, '/@theme': themeDir, '/@default-theme': DEFAULT_THEME_PATH, '/@shared': SHARED_PATH, - vitepress: `${APP_PATH}/exports.js`, [SITE_DATA_ID]: SITE_DATA_REQUEST_PATH } + + const aliases: Alias[] = [ + ...Object.keys(paths).map((p) => ({ + find: p, + replacement: paths[p] + })), + { find: /^vitepress$/, replacement: `${APP_PATH}/exports.js` } + ] + + let isLinked = false + try { + require.resolve('vitepress', { paths: [root] }) + } catch (e) { + isLinked = true + } + + if (isLinked) { + // aliases for local linked development + aliases.push( + { find: /^vitepress\//, replacement: PKG_ROOT + '/' }, + { + find: /^vue$/, + replacement: require.resolve( + '@vue/runtime-dom/dist/runtime-dom.esm-bundler.js' + ) + } + ) + } + + return aliases } diff --git a/src/node/config.ts b/src/node/config.ts index da078a20..e565e6ec 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -2,7 +2,7 @@ import path from 'path' import fs from 'fs-extra' import chalk from 'chalk' import globby from 'globby' -import { createAlias, APP_PATH, DEFAULT_THEME_PATH } from './alias' +import { resolveAliases, APP_PATH, DEFAULT_THEME_PATH } from './alias' import { SiteData, HeadConfig, LocaleConfig } from '../../types/shared' import { MarkdownOptions } from './markdown/markdown' import { AliasOptions } from 'vite' @@ -59,7 +59,7 @@ export async function resolveConfig( outDir: resolve(root, 'dist'), tempDir: path.resolve(APP_PATH, 'temp'), markdown: userConfig.markdown, - aliases: createAlias(themeDir, userConfig) + aliases: resolveAliases(root, themeDir, userConfig) } return config diff --git a/yarn.lock b/yarn.lock index 32bc629c..e0ddaef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5939,10 +5939,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite@^2.0.0-alpha.1: - version "2.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.0-alpha.1.tgz#bc184f7c0b06e9142dd0b5e49a0a7cbbb79989d2" - integrity sha512-bmpgZuTQo3n4jO/jsdiNZRZSIUZeISkCW9c99FV+lnwukA1DFri3ix9w7x439xYQnqDAzONPMfKHtR1zdmyDag== +vite@^2.0.0-alpha.2: + version "2.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.0-alpha.2.tgz#ef03271c0dc9d301076fbeed01b48849f89722a1" + integrity sha512-iGTlNzH4uskwEu32XmDk0i9dFRUax9ZHjL+5DXbX/cisNYQC35KhLaiLKwdL3iSu8fFYc3nd8sfKfCndJxL3AQ== dependencies: esbuild "^0.8.26" postcss "^8.2.1"