Skip to content

Commit 7d365dc

Browse files
committed
refactor(cli): refactor commands and types
1 parent 95ecb12 commit 7d365dc

22 files changed

+358
-270
lines changed

packages/cli/src/cli.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ import process from 'node:process'
33
import type { AppConfig } from '@vuepress/core'
44
import { colors, logger } from '@vuepress/utils'
55
import { cac } from 'cac'
6-
import { createBuild, createDev, info } from './commands/index.js'
6+
import { build, dev, info } from './commands/index.js'
7+
import type {
8+
BuildCommandCliOptions,
9+
DevCommandCliOptions,
10+
} from './types/index.js'
711

812
const require = createRequire(import.meta.url)
913

@@ -37,7 +41,13 @@ export const cli = (defaultAppConfig: Partial<AppConfig> = {}): void => {
3741
.option('--open', 'Open browser when ready')
3842
.option('--debug', 'Enable debug mode')
3943
.option('--no-watch', 'Disable watching page and config files')
40-
.action(createDev(defaultAppConfig))
44+
.action(async (sourceDir?: string, cliOptions?: DevCommandCliOptions) =>
45+
dev({
46+
defaultAppConfig,
47+
sourceDir,
48+
cliOptions,
49+
}),
50+
)
4151

4252
// register `build` command
4353
program
@@ -52,7 +62,13 @@ export const cli = (defaultAppConfig: Partial<AppConfig> = {}): void => {
5262
.option('--clean-temp', 'Clean the temporary files before build')
5363
.option('--clean-cache', 'Clean the cache files before build')
5464
.option('--debug', 'Enable debug mode')
55-
.action(createBuild(defaultAppConfig))
65+
.action(async (sourceDir?: string, cliOptions?: BuildCommandCliOptions) =>
66+
build({
67+
defaultAppConfig,
68+
sourceDir,
69+
cliOptions,
70+
}),
71+
)
5672

5773
// register `info` command
5874
program.command('info', 'Display environment information').action(info)

packages/cli/src/commands/build.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import process from 'node:process'
2+
import { createBuildApp } from '@vuepress/core'
3+
import { debug, formatMs, fs, logger, withSpinner } from '@vuepress/utils'
4+
import { resolveConfig } from '../config/index.js'
5+
import type { BuildCommand } from '../types/index.js'
6+
7+
const log = debug('vuepress:cli/build')
8+
9+
export const build: BuildCommand = async ({
10+
defaultAppConfig,
11+
sourceDir = '.',
12+
cliOptions = {},
13+
}) => {
14+
const start = Date.now()
15+
16+
log(`cliOptions:`, cliOptions)
17+
18+
process.env.NODE_ENV ??= 'production'
19+
20+
const { appConfig, userConfigPlugin } = await resolveConfig({
21+
defaultAppConfig,
22+
sourceDir,
23+
cliOptions,
24+
})
25+
26+
if (appConfig === null) {
27+
throw logger.createError('Failed to resolve config')
28+
}
29+
30+
// create vuepress app
31+
const app = createBuildApp(appConfig)
32+
33+
// use user-config plugin
34+
app.use(userConfigPlugin)
35+
36+
// clean temp and cache
37+
if (cliOptions.cleanTemp === true) {
38+
await withSpinner('Cleaning temp')(async () => {
39+
await fs.remove(app.dir.temp())
40+
})
41+
}
42+
if (cliOptions.cleanCache === true) {
43+
await withSpinner('Cleaning cache')(async () => {
44+
await fs.remove(app.dir.cache())
45+
})
46+
}
47+
48+
// empty dest directory
49+
await fs.emptyDir(app.dir.dest())
50+
51+
// initialize and prepare
52+
await withSpinner('Initializing and preparing data')(async () => {
53+
await app.init()
54+
await app.prepare()
55+
})
56+
57+
// build
58+
await app.build()
59+
60+
// plugin hook: onGenerated
61+
await app.pluginApi.hooks.onGenerated.process(app)
62+
63+
logger.success(`VuePress build completed in ${formatMs(Date.now() - start)}!`)
64+
}

packages/cli/src/commands/build/createBuild.ts

Lines changed: 0 additions & 82 deletions
This file was deleted.

packages/cli/src/commands/build/index.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

packages/cli/src/commands/build/types.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/cli/src/commands/dev/createDev.ts

Lines changed: 0 additions & 119 deletions
This file was deleted.

0 commit comments

Comments
 (0)