Skip to content

Commit

Permalink
feat(build): handle change of config file dependencies (#1009)
Browse files Browse the repository at this point in the history
Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
  • Loading branch information
CHOYSEN and brc-dd committed Aug 1, 2022
1 parent f4f1a6c commit 8e6665b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 20 deletions.
44 changes: 25 additions & 19 deletions src/node/config.ts
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -183,6 +188,7 @@ export async function resolveConfig(
themeDir,
pages,
configPath,
configDeps,
outDir,
tempDir: resolve(root, '.temp'),
markdown: userConfig.markdown,
Expand All @@ -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(
Expand Down
4 changes: 3 additions & 1 deletion src/node/plugin.ts
Expand Up @@ -39,6 +39,7 @@ export async function createVitePressPlugin(
const {
srcDir,
configPath,
configDeps,
alias,
markdown,
site,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit 8e6665b

Please sign in to comment.