Skip to content

Commit

Permalink
feat: add clearScreen option
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Jan 14, 2021
1 parent 4338d7d commit c5c3298
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 15 deletions.
10 changes: 9 additions & 1 deletion docs/config/index.md
Expand Up @@ -201,6 +201,13 @@ export default ({ command, mode }) => {

Adjust console output verbosity. Default is `'info'`.

### clearScreen

- **Type:** `boolean`
- **Default:** `true`

Set to `false` to prevent Vite from clearing the terminal screen when logging certain messages. Via command line, use `--clearScreen false`.

## Server Options

### server.host
Expand Down Expand Up @@ -234,8 +241,9 @@ export default ({ command, mode }) => {
- **Type:** `boolean | string`

Automatically open the app in the browser on server start. When the value is a string, it will be used as the URL's pathname.

**Example:**

```js
export default {
server: {
Expand Down
20 changes: 14 additions & 6 deletions packages/vite/src/node/cli.ts
Expand Up @@ -22,6 +22,7 @@ interface GlobalCLIOptions {
m?: string
logLevel?: LogLevel
l?: LogLevel
clearScreen?: boolean
}

/**
Expand All @@ -42,13 +43,15 @@ function cleanOptions(options: GlobalCLIOptions) {
delete ret.m
delete ret.logLevel
delete ret.l
delete ret.clearScreen
return ret
}

cli
.option('-c, --config <file>', `[string] use specified config file`)
.option('-r, --root <path>', `[string] use specified root directory`)
.option('-l, --logLevel <level>', `[string] silent | error | warn | all`)
.option('--clearScreen', `[boolean] allow/disable clear screen when logging`)
.option('-d, --debug [feat]', `[string | boolean] show debug logs`)
.option('-f, --filter <filter>', `[string] filter debug logs`)

Expand Down Expand Up @@ -77,12 +80,14 @@ cli
mode: options.mode,
configFile: options.config,
logLevel: options.logLevel,
clearScreen: options.clearScreen,
server: cleanOptions(options) as ServerOptions
})
await server.listen()
} catch (e) {
const logError = createLogger(options.logLevel).error
logError(chalk.red(`error when starting dev server:\n${e.stack}`))
createLogger(options.logLevel).error(
chalk.red(`error when starting dev server:\n${e.stack}`)
)
process.exit(1)
}
})
Expand Down Expand Up @@ -125,11 +130,13 @@ cli
mode: options.mode,
configFile: options.config,
logLevel: options.logLevel,
clearScreen: options.clearScreen,
build: cleanOptions(options) as BuildOptions
})
} catch (e) {
const logError = createLogger(options.logLevel).error
logError(chalk.red(`error during build:\n${e.stack}`))
createLogger(options.logLevel).error(
chalk.red(`error during build:\n${e.stack}`)
)
process.exit(1)
}
})
Expand All @@ -156,8 +163,9 @@ cli
)
await optimizeDeps(config, options.force, true)
} catch (e) {
const logError = createLogger(options.logLevel).error
logError(chalk.red(`error when optimizing deps:\n${e.stack}`))
createLogger(options.logLevel).error(
chalk.red(`error when optimizing deps:\n${e.stack}`)
)
process.exit(1)
}
}
Expand Down
6 changes: 5 additions & 1 deletion packages/vite/src/node/config.ts
Expand Up @@ -98,6 +98,10 @@ export interface UserConfig {
* Default: 'info'
*/
logLevel?: LogLevel
/**
* Default: true
*/
clearScreen?: boolean
}

export interface InlineConfig extends UserConfig {
Expand Down Expand Up @@ -237,7 +241,7 @@ export async function resolveConfig(
assetsInclude(file: string) {
return DEFAULT_ASSETS_RE.test(file) || assetsFilter(file)
},
logger: createLogger(config.logLevel)
logger: createLogger(config.logLevel, config.clearScreen)
}

resolved.plugins = await resolvePlugins(
Expand Down
16 changes: 9 additions & 7 deletions packages/vite/src/node/logger.ts
Expand Up @@ -35,8 +35,12 @@ function clearScreen() {
readline.clearScreenDown(process.stdout)
}

export function createLogger(level: LogLevel = 'info'): Logger {
export function createLogger(
level: LogLevel = 'info',
allowClearScreen = true

This comment has been minimized.

Copy link
@bompus

bompus Jan 15, 2021

Contributor

Shouldn't this be allowClearScreen: boolean = true ?

This comment has been minimized.

Copy link
@yyx990803

yyx990803 Jan 15, 2021

Author Member

TS infers the type from the default value.

This comment has been minimized.

Copy link
@bompus

bompus Jan 15, 2021

Contributor

Disregard. I just needed to reload VS Code after pulling the latest, as it didn't refresh the types for me for some reason.

): Logger {
const thresh = LogLevels[level]
const clear = allowClearScreen ? clearScreen : () => {}

function output(type: LogType, msg: string, options: LogOptions = {}) {
if (thresh >= LogLevels[type]) {
Expand All @@ -49,23 +53,21 @@ export function createLogger(level: LogLevel = 'info'): Logger {
: type === 'warn'
? chalk.yellow.bold(`[vite]`)
: chalk.red.bold(`[vite]`)
return `${chalk.dim(
new Date().toLocaleTimeString()
)} ${tag} ${msg}`
return `${chalk.dim(new Date().toLocaleTimeString())} ${tag} ${msg}`
} else {
return msg
}
}
if (type === lastType && msg === lastMsg) {
sameCount++
clearScreen()
clear()
console[method](format(), chalk.yellow(`(x${sameCount + 1})`))
} else {
sameCount = 0
lastMsg = msg
lastType = type
if (options.clear) {
clearScreen()
clear()
}
console[method](format())
}
Expand All @@ -84,7 +86,7 @@ export function createLogger(level: LogLevel = 'info'): Logger {
},
clearScreen(type) {
if (thresh >= LogLevels[type]) {
clearScreen()
clear()
}
}
}
Expand Down

0 comments on commit c5c3298

Please sign in to comment.