Nuxt3启动/构建流程 生命周期钩子执行顺序

10/12/2022 javascriptNuxt3

# 相关文档

https://v3.nuxtjs.org/guide/going-further/hooks (opens new window)

https://v3.nuxtjs.org/api/advanced/hooks (opens new window)

schema source code (opens new window)

# 实现

nuxt.config.ts中加入

// 注册所有启动/构建相关的钩子函数
export default defineNuxtConfig({
  hooks: {
    // Kit
    'kit:compatibility': () => console.log('kit:compatibility'),

    // nuxt
    'app:resolve': () => console.log('app:resolve'),
    'app:templates': () => console.log('app:templates'),
    'app:templatesGenerated': () => console.log('app:templatesGenerated'),
    'builder:generateApp': () => console.log('builder:generateApp'),
    'pages:extend': () => console.log('pages:extend'),
    'build:manifest': () => console.log('build:manifest'),

    // Auto imports
    'imports:sources': () => console.log('imports:sources'),
    'imports:extend': () => console.log('imports:extend'),
    'imports:dirs': () => console.log('imports:dirs'),

    // Components
    'components:dirs': () => console.log('components:dirs'),
    'components:extend': () => console.log('components:extend'),

    // @nuxt/builder
    'build:before': () => console.log('build:before'),
    'builder:prepared': () => console.log('builder:prepared'),
    'builder:extendPlugins': () => console.log('builder:extendPlugins'),
    'build:templates': () => console.log('build:templates'),
    'build:extendRoutes': () => console.log('build:extendRoutes'),
    'build:done': () => console.log('build:done'),
    'watch:restart': () => console.log('watch:restart'),
    'builder:watch': () => console.log('builder:watch'),

    // nitropack
    'nitro:config': () => console.log('nitro:config'),
    'nitro:init': () => console.log('nitro:init'),
    'nitro:build:before': () => console.log('nitro:build:before'),

    // @nuxt/cli
    'generate:cache:ignore': () => console.log('generate:cache:ignore'),
    'config': () => console.log('config'),
    'run:before': () => console.log('run:before'),

    // nuxi
    'build:error': () => console.log('build:error'),
    'prepare:types': () => console.log('prepare:types'),

    // @nuxt/core
    'ready': () => console.log('ready'),
    'close': () => console.log('close'),
    'modules:before': () => console.log('modules:before'),
    'modules:done': () => console.log('modules:done'),

    // @nuxt/server
    'render:before': () => console.log('render:before'),
    'render:setupMiddleware': () => console.log('render:setupMiddleware'),
    'render:errorMiddleware': () => console.log('render:errorMiddleware'),
    'render:done': () => console.log('render:done'),
    'listen': () => console.log('listen'),
    'server:nuxt:renderLoading': () => console.log('server:nuxt:renderLoading'),
    'render:route': () => console.log('render:route'),
    'render:routeDone': () => console.log('render:routeDone'),
    'render:beforeResponse': () => console.log('render:beforeResponse'),

    // @nuxt/vue-renderer
    'render:resourcesLoaded': () => console.log('render:resourcesLoaded'),
    'vue-renderer:context': () => console.log('vue-renderer:context'),
    'vue-renderer:spa:prepareContext': () => console.log('vue-renderer:spa:prepareContext'),
    'vue-renderer:spa:templateParams': () => console.log('vue-renderer:spa:templateParams'),
    'vue-renderer:ssr:prepareContext': () => console.log('vue-renderer:ssr:prepareContext'),
    'vue-renderer:ssr:context': () => console.log('vue-renderer:ssr:context'),
    'vue-renderer:ssr:csp': () => console.log('vue-renderer:ssr:csp'),
    'vue-renderer:ssr:templateParams': () => console.log('vue-renderer:ssr:templateParams'),

    // @nuxt/webpack
    'webpack:config': () => console.log('webpack:config'),
    'webpack:devMiddleware': () => console.log('webpack:devMiddleware'),
    'webpack:hotMiddleware': () => console.log('webpack:hotMiddleware'),
    'build:compile': () => console.log('build:compile'),
    'build:compiled': () => console.log('build:compiled'),
    'build:resources': () => console.log('build:resources'),
    'server:devMiddleware': () => console.log('server:devMiddleware'),
    'bundler:change': () => console.log('bundler:change'),
    'bundler:error': () => console.log('bundler:error'),
    'bundler:done': () => console.log('bundler:done'),
    'bundler:progress': () => console.log('bundler:progress'),

    // @nuxt/generator
    'generate:before': () => console.log('generate:before'),
    'generate:distRemoved': () => console.log('generate:distRemoved'),
    'generate:distCopied': () => console.log('generate:distCopied'),
    'generate:route': () => console.log('generate:route'),
    'generate:page': () => console.log('generate:page'),
    'generate:routeCreated': () => console.log('generate:routeCreated'),
    'generate:extendRoutes': () => console.log('generate:extendRoutes'),
    'generate:routeFailed': () => console.log('generate:routeFailed'),
    'generate:manifest': () => console.log('generate:manifest'),
    'generate:done': () => console.log('generate:done'),

    'export:before': () => console.log('export:before'),
    'export:distRemoved': () => console.log('export:distRemoved'),
    'export:distCopied': () => console.log('export:distCopied'),
    'export:route': () => console.log('export:route'),
    'export:routeCreated': () => console.log('export:routeCreated'),
    'export:extendRoutes': () => console.log('export:extendRoutes'),
    'export:routeFailed': () => console.log('export:routeFailed'),
    'export:done': () => console.log('export:done'),

    // vite
    'vite:extend': () => console.log('vite:extend'),
    'vite:extendConfig': () => console.log('vite:extendConfig'),
    'vite:serverCreated': () => console.log('vite:serverCreated'),
  },
  nitro: {
    hooks: {
      'rollup:before': () => console.log('rollup:before'),
      'compiled': () => console.log('compiled'),
      'dev:reload': () => console.log('dev:reload'),
      'close': () => console.log('close'),
      'prerender:route': () => console.log('prerender:route'),
      'prerender:generate': () => console.log('prerender:generate'),
    }
  },
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125

启动nuxt, 就可以看到我们打印的钩子名称了

kit:compatibility (repeated 4 times)
imports:sources
imports:dirs
imports:extend
modules:done
nitro:config
nitro:init
ready
listen
prepare:types
app:resolve
components:dirs
app:templates
components:extend
pages:extend
app:templatesGenerated
build:before
vite:extend
vite:extendConfig
vite:serverCreated
server:devMiddleware
vite:extendConfig
build:manifest
pages:extend
ℹ Vite client warmed up
vite:serverCreated
build:done
nitro:build:before
rollup:before
✔ Nitro built
compiled
dev:reload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

ps: 本文为Nuxt3启动/构建流程,runtime同理

Last Updated: 9/22/2023, 6:04:11 AM