feat(build): handle change of config file dependencies (#1009)

Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
pull/1101/head
CHOYSEN 2 years ago committed by GitHub
parent f4f1a6ccd6
commit 8e6665bd8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -119,6 +119,7 @@ export interface SiteConfig<ThemeConfig = any>
srcDir: string
site: SiteData<ThemeConfig>
configPath: string | undefined
configDeps: string[]
themeDir: string
outDir: string
tempDir: string
@ -150,7 +151,11 @@ export async function resolveConfig(
command: 'serve' | 'build' = 'serve',
mode = 'development'
): Promise<SiteConfig> {
const [userConfig, configPath] = await resolveUserConfig(root, command, mode)
const [userConfig, configPath, configDeps] = await resolveUserConfig(
root,
command,
mode
)
const site = await resolveSiteData(root, userConfig)
const srcDir = path.resolve(root, userConfig.srcDir || '.')
const outDir = userConfig.outDir
@ -183,6 +188,7 @@ export async function resolveConfig(
themeDir,
pages,
configPath,
configDeps,
outDir,
tempDir: resolve(root, '.temp'),
markdown: userConfig.markdown,
@ -206,32 +212,32 @@ async function resolveUserConfig(
root: string,
command: 'serve' | 'build',
mode: string
): Promise<[UserConfig, string | undefined]> {
): Promise<[UserConfig, string | undefined, string[]]> {
// load user config
const configPath = supportedConfigExtensions
.map((ext) => resolve(root, `config.${ext}`))
.find(fs.pathExistsSync)
const userConfig: RawConfigExports = configPath
? ((
await loadConfigFromFile(
{
command,
mode
},
configPath,
root
)
)?.config as any)
: {}
if (configPath) {
debug(`loaded config at ${c.yellow(configPath)}`)
} else {
let userConfig: RawConfigExports = {}
let configDeps: string[] = []
if (!configPath) {
debug(`no config file found.`)
} else {
const configExports = await loadConfigFromFile(
{ command, mode },
configPath,
root
)
if (configExports) {
userConfig = configExports.config
configDeps = configExports.dependencies.map((file) =>
normalizePath(path.resolve(file))
)
}
debug(`loaded config at ${c.yellow(configPath)}`)
}
return [await resolveConfigExtends(userConfig), configPath]
return [await resolveConfigExtends(userConfig), configPath, configDeps]
}
async function resolveConfigExtends(

@ -39,6 +39,7 @@ export async function createVitePressPlugin(
const {
srcDir,
configPath,
configDeps,
alias,
markdown,
site,
@ -162,6 +163,7 @@ export async function createVitePressPlugin(
configureServer(server) {
if (configPath) {
server.watcher.add(configPath)
configDeps.forEach((file) => server.watcher.add(file))
}
// serve our index.html after vite history fallback
@ -244,7 +246,7 @@ export async function createVitePressPlugin(
async handleHotUpdate(ctx) {
// handle config hmr
const { file, read, server } = ctx
if (file === configPath) {
if (file === configPath || configDeps.includes(file)) {
const newData = await resolveSiteData(root)
if (newData.base !== siteData.base) {
console.warn(

Loading…
Cancel
Save