@@ -10,7 +10,8 @@ import { overrideEnv } from '../utils/env'
1010import { clearBuildDir } from '../utils/fs'
1111import { loadKit } from '../utils/kit'
1212import { logger } from '../utils/logger'
13- import { cwdArgs , dotEnvArgs , envNameArgs , extendsArgs , legacyRootDirArgs , logLevelArgs } from './_shared'
13+ import { startCpuProfile , stopCpuProfile } from '../utils/profile'
14+ import { cwdArgs , dotEnvArgs , envNameArgs , extendsArgs , legacyRootDirArgs , logLevelArgs , profileArgs } from './_shared'
1415
1516export default defineCommand ( {
1617 meta : {
@@ -31,74 +32,98 @@ export default defineCommand({
3132 ...dotEnvArgs ,
3233 ...envNameArgs ,
3334 ...extendsArgs ,
35+ ...profileArgs ,
3436 ...legacyRootDirArgs ,
3537 } ,
3638 async run ( ctx ) {
3739 overrideEnv ( 'production' )
3840
3941 const cwd = resolve ( ctx . args . cwd || ctx . args . rootDir )
4042
41- intro ( colors . cyan ( 'Building Nuxt for production...' ) )
43+ const profileArg = ctx . args . profile
44+ const perfValue = profileArg === 'verbose' ? true : profileArg ? 'quiet' : undefined
45+ if ( profileArg ) {
46+ await startCpuProfile ( )
47+ }
48+
49+ try {
50+ intro ( colors . cyan ( 'Building Nuxt for production...' ) )
4251
43- const kit = await loadKit ( cwd )
52+ const kit = await loadKit ( cwd )
4453
45- await showVersions ( cwd , kit , ctx . args . dotenv )
46- const nuxt = await kit . loadNuxt ( {
47- cwd,
48- dotenv : {
54+ await showVersions ( cwd , kit , ctx . args . dotenv )
55+
56+ const nuxt = await kit . loadNuxt ( {
4957 cwd,
50- fileName : ctx . args . dotenv ,
51- } ,
52- envName : ctx . args . envName , // c12 will fall back to NODE_ENV
53- overrides : {
54- logLevel : ctx . args . logLevel as 'silent' | 'info' | 'verbose' ,
55- // TODO: remove in 3.8
56- _generate : ctx . args . prerender ,
57- nitro : {
58- static : ctx . args . prerender ,
59- preset : ctx . args . preset || process . env . NITRO_PRESET || process . env . SERVER_PRESET ,
58+ dotenv : {
59+ cwd,
60+ fileName : ctx . args . dotenv ,
61+ } ,
62+ envName : ctx . args . envName , // c12 will fall back to NODE_ENV
63+ overrides : {
64+ logLevel : ctx . args . logLevel as 'silent' | 'info' | 'verbose' ,
65+ // TODO: remove in 3.8
66+ _generate : ctx . args . prerender ,
67+ nitro : {
68+ static : ctx . args . prerender ,
69+ preset : ctx . args . preset || process . env . NITRO_PRESET || process . env . SERVER_PRESET ,
70+ } ,
71+ ...( ctx . args . extends && { extends : ctx . args . extends } ) ,
72+ ...ctx . data ?. overrides ,
73+ ...( ( perfValue || ctx . data ?. overrides ?. debug ) && {
74+ debug : {
75+ ...ctx . data ?. overrides ?. debug ,
76+ ...( perfValue && { perf : perfValue } ) ,
77+ } ,
78+ } ) ,
6079 } ,
61- ...( ctx . args . extends && { extends : ctx . args . extends } ) ,
62- ...ctx . data ?. overrides ,
63- } ,
64- } )
80+ } )
6581
66- let nitro : ReturnType < typeof kit . useNitro > | undefined
67- // In Bridge, if Nitro is not enabled, useNitro will throw an error
68- try {
69- // Use ? for backward compatibility for Nuxt <= RC.10
70- nitro = kit . useNitro ?.( )
71- if ( nitro ) {
72- logger . info ( `Nitro preset: ${ colors . cyan ( nitro . options . preset ) } ` )
82+ let nitro : ReturnType < typeof kit . useNitro > | undefined
83+ // In Bridge, if Nitro is not enabled, useNitro will throw an error
84+ try {
85+ // Use ? for backward compatibility for Nuxt <= RC.10
86+ nitro = kit . useNitro ?.( )
87+ if ( nitro ) {
88+ logger . info ( `Nitro preset: ${ colors . cyan ( nitro . options . preset ) } ` )
89+ }
90+ }
91+ catch {
92+ //
7393 }
74- }
75- catch {
76- //
77- }
7894
79- await clearBuildDir ( nuxt . options . buildDir )
95+ await clearBuildDir ( nuxt . options . buildDir )
8096
81- await kit . writeTypes ( nuxt )
97+ await kit . writeTypes ( nuxt )
8298
83- nuxt . hook ( 'build:error' , ( err ) => {
84- logger . error ( `Nuxt build error: ${ err } ` )
85- process . exit ( 1 )
86- } )
99+ nuxt . hook ( 'build:error' , async ( err ) => {
100+ logger . error ( `Nuxt build error: ${ err } ` )
101+ if ( profileArg ) {
102+ await stopCpuProfile ( cwd , 'build' )
103+ }
104+ process . exit ( 1 )
105+ } )
87106
88- await kit . buildNuxt ( nuxt )
107+ await kit . buildNuxt ( nuxt )
89108
90- if ( ctx . args . prerender ) {
91- if ( ! nuxt . options . ssr ) {
92- logger . warn ( `HTML content not prerendered because ${ colors . cyan ( 'ssr: false' ) } was set.` )
93- logger . info ( `You can read more in ${ colors . cyan ( 'https://nuxt.com/docs/getting-started/deployment#static-hosting' ) } .` )
109+ if ( ctx . args . prerender ) {
110+ if ( ! nuxt . options . ssr ) {
111+ logger . warn ( `HTML content not prerendered because ${ colors . cyan ( 'ssr: false' ) } was set.` )
112+ logger . info ( `You can read more in ${ colors . cyan ( 'https://nuxt.com/docs/getting-started/deployment#static-hosting' ) } .` )
113+ }
114+ // TODO: revisit later if/when nuxt build --prerender will output hybrid
115+ const dir = nitro ?. options . output . publicDir
116+ const publicDir = dir ? relative ( process . cwd ( ) , dir ) : '.output/public'
117+ outro ( `✨ You can now deploy ${ colors . cyan ( publicDir ) } to any static hosting!` )
118+ }
119+ else {
120+ outro ( '✨ Build complete!' )
94121 }
95- // TODO: revisit later if/when nuxt build --prerender will output hybrid
96- const dir = nitro ?. options . output . publicDir
97- const publicDir = dir ? relative ( process . cwd ( ) , dir ) : '.output/public'
98- outro ( `✨ You can now deploy ${ colors . cyan ( publicDir ) } to any static hosting!` )
99122 }
100- else {
101- outro ( '✨ Build complete!' )
123+ finally {
124+ if ( profileArg ) {
125+ await stopCpuProfile ( cwd , 'build' )
126+ }
102127 }
103128 } ,
104129} )
0 commit comments