dev 命令大致流程 #

拆解执行过程 #
首先导入一个包
listhen用于启动一个HTTP 服务利用
listhen传入serverHandler之后启动一个HTTP 服务currentHandler的来源是来自于预先定义好的一个空变量, 在启动listhen的过程中还是为null的, 所以会在页面中展示@nuxt/ui-templates的 loading 动画, 等待服务启动完成const serverHandler = (req, res) => { return currentHandler ? currentHandler(req, res) : loadingHandler(req, res) }用
loadKit从packages/kit中加载需要用到的套件loadNuxt加载 NuxtbuildNuxt构建 Nuxtconst rootDir = resolve(args._[0] || '.') const { loadNuxt, buildNuxt } = await loadKit(rootDir)接下来会保存一个
currentNuxt作为当前 Nuxt 的实例定义一个
load函数,主要用来启动/重启 Nuxt 实例在
load函数内部主要干的几件事- 利用
currentHandler设置为null来实现HTTP服务未加载完成的 Loading - 如果当前
currentNuxt实例存在,则关闭当前实例 - 利用
loadNuxt重启 Nuxt 服务 - 确保 Nuxt 生成文件成功之后,用
buildNuxt构建 Nuxt 代码 - 重新设置
currentHandler来重启服务 - 输出修改页面的 URL
- **错误处理:**如果有错误则执行以下逻辑
- 输出错误信息
- 设置
currentHandler设置为null - 提示修改页面
- 利用
接下来定义了一个
dLoad避免同个文件多次保存引起多次重启初始化监听器,跳过初始化的时候执行,并且只监听一层目录,目录下所有的改动都会有反馈
针对不同的修改
File/Dir都会执行不同的更新方式手动执行一次
load然后调用
currentNuxt里的listen钩子,触发相关方法