feat(nuxi,schema): add support for setting nuxt logLevel (#19369)

This commit is contained in:
Jakub Andrzejewski 2023-03-07 13:18:47 +01:00 committed by GitHub
parent fe149618da
commit 3f1e02351d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 71 additions and 16 deletions

View File

@ -11,7 +11,7 @@ import { defineNuxtCommand } from './index'
export default defineNuxtCommand({
meta: {
name: 'analyze',
usage: 'npx nuxi analyze [rootDir]',
usage: 'npx nuxi analyze [--log-level] [rootDir]',
description: 'Build nuxt and analyze production bundle (experimental)'
},
async invoke (args) {
@ -24,10 +24,9 @@ export default defineNuxtCommand({
const nuxt = await loadNuxt({
rootDir,
config: {
build: {
analyze: true
}
overrides: {
build: { analyze: true },
logLevel: args['log-level']
}
})

View File

@ -10,7 +10,7 @@ import { defineNuxtCommand } from './index'
export default defineNuxtCommand({
meta: {
name: 'build',
usage: 'npx nuxi build [--prerender] [--dotenv] [rootDir]',
usage: 'npx nuxi build [--prerender] [--dotenv] [--log-level] [rootDir]',
description: 'Build nuxt for production deployment'
},
async invoke (args) {
@ -33,6 +33,7 @@ export default defineNuxtCommand({
}
},
overrides: {
logLevel: args['log-level'],
_generate: args.prerender
}
})

View File

@ -19,7 +19,7 @@ import { defineNuxtCommand } from './index'
export default defineNuxtCommand({
meta: {
name: 'dev',
usage: 'npx nuxi dev [rootDir] [--dotenv] [--clipboard] [--open, -o] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key]',
usage: 'npx nuxi dev [rootDir] [--dotenv] [--log-level] [--clipboard] [--open, -o] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key]',
description: 'Run nuxt development server'
},
async invoke (args) {
@ -48,7 +48,10 @@ export default defineNuxtCommand({
const config = await loadNuxtConfig({
cwd: rootDir,
overrides: { dev: true }
overrides: {
dev: true,
logLevel: args['log-level']
}
})
const listener = await listen(serverHandler, {
@ -88,7 +91,14 @@ export default defineNuxtCommand({
await distWatcher.close()
}
currentNuxt = await loadNuxt({ rootDir, dev: true, ready: false })
currentNuxt = await loadNuxt({
rootDir,
dev: true,
ready: false,
overrides: {
logLevel: args['log-level']
}
})
currentNuxt.hooks.hookOnce('restart', async (options) => {
if (options?.hard && process.send) {

View File

@ -9,7 +9,7 @@ import { defineNuxtCommand } from './index'
export default defineNuxtCommand({
meta: {
name: 'prepare',
usage: 'npx nuxi prepare',
usage: 'npx nuxi prepare [--log-level] [rootDir]',
description: 'Prepare nuxt for development/build'
},
async invoke (args) {
@ -17,7 +17,13 @@ export default defineNuxtCommand({
const rootDir = resolve(args._[0] || '.')
const { loadNuxt } = await loadKit(rootDir)
const nuxt = await loadNuxt({ rootDir, config: { _prepare: true } })
const nuxt = await loadNuxt({
rootDir,
overrides: {
_prepare: true,
logLevel: args['log-level']
}
})
await clearDir(nuxt.options.buildDir)
await buildNuxt(nuxt)

View File

@ -9,7 +9,7 @@ import { defineNuxtCommand } from './index'
export default defineNuxtCommand({
meta: {
name: 'typecheck',
usage: 'npx nuxi typecheck [rootDir]',
usage: 'npx nuxi typecheck [--log-level] [rootDir]',
description: 'Runs `vue-tsc` to check types throughout your app.'
},
async invoke (args) {
@ -17,7 +17,13 @@ export default defineNuxtCommand({
const rootDir = resolve(args._[0] || '.')
const { loadNuxt, buildNuxt } = await loadKit(rootDir)
const nuxt = await loadNuxt({ rootDir, config: { _prepare: true } })
const nuxt = await loadNuxt({
rootDir,
overrides: {
_prepare: true,
logLevel: args['log-level']
}
})
// Generate types and build nuxt instance
await writeTypes(nuxt)

View File

@ -1,6 +1,7 @@
import { defineUntypedSchema } from 'untyped'
import { defu } from 'defu'
import { join } from 'pathe'
import { isTest } from 'std-env'
export default defineUntypedSchema({
/**
@ -38,6 +39,23 @@ export default defineUntypedSchema({
},
},
/**
* Log level when building logs.
*
* Defaults to 'silent' when running in CI or when a TTY is not available.
* This option is then used as 'silent' in Vite and 'none' in Webpack
*
* @type {'silent' | 'info' | 'verbose'}
*/
logLevel: {
$resolve: (val) => {
if (val && !['silent', 'info', 'verbose'].includes(val)) {
console.warn(`Invalid \`logLevel\` option: \`${val}\`. Must be one of: \`silent\`, \`info\`, \`verbose\`.`)
}
return val ?? (isTest ? 'silent' : 'info')
}
},
/**
* Shared build configuration.
*/

View File

@ -1,7 +1,7 @@
import * as vite from 'vite'
import { join, resolve } from 'pathe'
import type { Nuxt } from '@nuxt/schema'
import type { InlineConfig, SSROptions } from 'vite'
import type { Nuxt, NuxtOptions } from '@nuxt/schema'
import type { InlineConfig, SSROptions, UserConfig } from 'vite'
import { logger, isIgnored, resolvePath, addVitePlugin } from '@nuxt/kit'
import type { Options as VueOptions } from '@vitejs/plugin-vue'
import type { Options as VueJsxOptions } from '@vitejs/plugin-vue-jsx'
@ -41,6 +41,7 @@ export async function bundle (nuxt: Nuxt) {
entry,
config: vite.mergeConfig(
{
logLevel: logLevelMap[nuxt.options.logLevel] ?? logLevelMap.info,
resolve: {
alias: {
...nuxt.options.alias,
@ -147,3 +148,9 @@ export async function bundle (nuxt: Nuxt) {
await buildClient(ctx)
await buildServer(ctx)
}
const logLevelMap: Record<NuxtOptions['logLevel'], UserConfig['logLevel']> = {
silent: 'silent',
info: 'info',
verbose: 'info'
}

View File

@ -2,12 +2,14 @@ import { resolve, normalize } from 'pathe'
// @ts-expect-error missing types
import TimeFixPlugin from 'time-fix-plugin'
import WebpackBar from 'webpackbar'
import type { Configuration } from 'webpack'
import webpack from 'webpack'
import { logger } from '@nuxt/kit'
// @ts-expect-error missing types
import FriendlyErrorsWebpackPlugin from '@nuxt/friendly-errors-webpack-plugin'
import escapeRegExp from 'escape-string-regexp'
import { joinURL } from 'ufo'
import type { NuxtOptions } from '@nuxt/schema'
import type { WarningFilter } from '../plugins/warning-ignore'
import WarningIgnorePlugin from '../plugins/warning-ignore'
import type { WebpackConfigContext } from '../utils/config'
@ -40,7 +42,7 @@ function baseConfig (ctx: WebpackConfigContext) {
mode: ctx.isDev ? 'development' : 'production',
cache: getCache(ctx),
output: getOutput(ctx),
stats: 'none',
stats: statsMap[ctx.nuxt.options.logLevel] ?? statsMap.info,
...ctx.config
}
}
@ -244,3 +246,9 @@ function getEnv (ctx: WebpackConfigContext) {
return _env
}
const statsMap: Record<NuxtOptions['logLevel'], Configuration['stats']> = {
silent: 'none',
info: 'normal',
verbose: 'verbose'
}