diff --git a/src/node/build/bundle.ts b/src/node/build/bundle.ts index 91543b09b708..b3ef8d96c2f7 100644 --- a/src/node/build/bundle.ts +++ b/src/node/build/bundle.ts @@ -3,7 +3,7 @@ import slash from 'slash' import fs from 'fs-extra' import { APP_PATH, createResolver, SITE_DATA_REQUEST_PATH } from '../resolver' import { BuildOptions } from './build' -import { SiteConfig } from '../config' +import { resolveUserConfig, SiteConfig } from '../config' import { Plugin, OutputAsset, OutputChunk } from 'rollup' import { createMarkdownToVueRenderFn } from '../markdownToVue' import { @@ -34,7 +34,8 @@ export async function bundle( options: BuildOptions ): Promise<[BuildResult, BuildResult, Record]> { const root = config.root - const resolver = createResolver(config.themeDir) + const userConfig = await resolveUserConfig(root) + const resolver = createResolver(config.themeDir, userConfig) const markdownToVue = createMarkdownToVueRenderFn(root) let isClientBuild = true diff --git a/src/node/config.ts b/src/node/config.ts index ecc5248ad30e..3df6646c83e0 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -17,6 +17,7 @@ export interface UserConfig { head?: HeadConfig[] themeConfig?: ThemeConfig locales?: Record + alias?: Record // TODO locales support etc. } @@ -37,6 +38,7 @@ const resolve = (root: string, file: string) => export async function resolveConfig( root: string = process.cwd() ): Promise { + const userConfig = await resolveUserConfig(root) const site = await resolveSiteData(root) // resolve theme path @@ -53,13 +55,13 @@ export async function resolveConfig( configPath: resolve(root, 'config.js'), outDir: resolve(root, 'dist'), tempDir: path.resolve(APP_PATH, 'temp'), - resolver: createResolver(themeDir) + resolver: createResolver(themeDir, userConfig) } return config } -export async function resolveSiteData(root: string): Promise { +export async function resolveUserConfig(root: string) { // load user config const configPath = resolve(root, 'config.js') const hasUserConfig = await fs.pathExists(configPath) @@ -72,6 +74,12 @@ export async function resolveSiteData(root: string): Promise { debug(`no config file found.`) } + return userConfig +} + +export async function resolveSiteData(root: string): Promise { + const userConfig = await resolveUserConfig(root) + return { lang: userConfig.lang || 'en-US', title: userConfig.title || 'VitePress', diff --git a/src/node/resolver.ts b/src/node/resolver.ts index 9ba866acc8b1..6ac5afc22718 100644 --- a/src/node/resolver.ts +++ b/src/node/resolver.ts @@ -1,5 +1,6 @@ import path from 'path' import { Resolver } from 'vite' +import { UserConfig } from './config' export const APP_PATH = path.join(__dirname, '../client/app') export const SHARED_PATH = path.join(__dirname, '../client/shared') @@ -15,9 +16,13 @@ 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 createResolver(themeDir: string): Resolver { +export function createResolver( + themeDir: string, + userConfig: UserConfig +): Resolver { return { alias: { + ...userConfig.alias, '/@app/': APP_PATH, '/@theme/': themeDir, '/@shared/': SHARED_PATH,