Skip to content

Commit

Permalink
feat: 用户配置热更新
Browse files Browse the repository at this point in the history
  • Loading branch information
c0dedance committed Oct 15, 2023
1 parent a8ff646 commit 8af907f
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 29 deletions.
17 changes: 13 additions & 4 deletions src/node/cli.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { cac } from 'cac'
import { createDevServer } from './dev'
import { build } from './build'
import { version } from '../../package.json'

Expand All @@ -9,9 +8,19 @@ cli
.command('[root]', 'start dev server')
.alias('dev')
.action(async (root: string) => {
const server = await createDevServer(root)
await server.listen()
server.printUrls()
const createServer = async () => {
const { createDevServer } = await import('./dev')
const restartServer = async () => {
await server.close()
await createServer()
}
const server = await createDevServer(root, restartServer)

await server.listen()
server.printUrls()
}

await createServer()
})

cli
Expand Down
13 changes: 10 additions & 3 deletions src/node/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,22 @@ import { createServer as createViteDevServer } from 'vite'
import pluginReact from '@vitejs/plugin-react'
import { pluginIndexHtml } from './plugin-r-press/indexHtml'
import { ROOT } from './constant'
import { pluginSiteData } from './plugin-r-press/siteData'
import { pluginConfig } from './plugin-r-press/config'
import { resolveConfig } from './config'

export async function createDevServer(root: string = process.cwd()) {
export async function createDevServer(
root: string = process.cwd(),
restartServer: () => Promise<void>
) {
const config = await resolveConfig(root, 'serve', 'development')

return createViteDevServer({
root,
plugins: [pluginIndexHtml(), pluginReact(), pluginSiteData(config)],
plugins: [
pluginIndexHtml(),
pluginReact(),
pluginConfig(config, restartServer),
],
server: {
fs: {
// 允许为项目根目录的上一级提供服务
Expand Down
39 changes: 39 additions & 0 deletions src/node/plugin-r-press/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { relative } from 'path'
import { SiteConfig } from 'shared/types'
import { Plugin } from 'vite'

const SITE_DATA_ID = 'rpress:site-data'

export function pluginConfig(
config: SiteConfig,
restartServer: () => Promise<void>
): Plugin {
return {
name: 'r-press:site-data',
resolveId(id) {
if (id === SITE_DATA_ID) {
return '\0' + SITE_DATA_ID
}
},
load(id) {
if (id === '\0' + SITE_DATA_ID) {
return `
export default ${JSON.stringify(config.siteData)}
`
}
},
async handleHotUpdate(ctx) {
const customWatchedFiles = [config.configPath]
const include = (id: string) =>
customWatchedFiles.some((file) => id.includes(file))

if (include(ctx.file)) {
console.log(
`\n${relative(config.root, ctx.file)} changed, restarting server...`
)
// 重启 Dev Server
await restartServer()
}
},
}
}
21 changes: 0 additions & 21 deletions src/node/plugin-r-press/siteData.ts

This file was deleted.

2 changes: 1 addition & 1 deletion tsup.config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { defineConfig } from 'tsup'

export default defineConfig({
entryPoints: ['src/node/cli.ts', 'src/node/index.ts'],
entryPoints: ['src/node/cli.ts', 'src/node/index.ts', 'src/node/dev.ts'],
bundle: true,
splitting: true,
outDir: 'dist',
Expand Down

0 comments on commit 8af907f

Please sign in to comment.