Nuxt.js
和 Next.js 类似,Nuxt.js 也是一个服务端自写的,客户端基于Vue,它专用于 Vue SSR/SSG。
它的亮点是,脚手架内置开发者工具,在开发页面上提供了一个GUI界面,方便开发者使用。这个工具给人一种耳目一新的感觉。
Demo
通过 nuxi
创建的代码Demo 仓库
shell
npx nuxi@latest init <project-name>
吐槽一下:下面这段测试代码,客户端加载的构建产物JS总大小111KB
,过于庞大
vue
<template>
<div>
<div>{{ count }}</div>
<button @click="count++">add</button>
</div>
</template>
<script setup>
const count = ref(0)
</script>
注意
由于网络环境问题,Nuxt.js 的安装过程对国内用户不友好。
- 模板下载报错 估计是代码逻辑问题,它强依赖于对 github.com 的静态资源访问,不走系统代理。这导致国内用户下载代码模板会遇到问题shell
# 避免mention https://github.com/nuxt/nuxt/issues/15101
- npm install 报错 它的一个依赖包
fast-folder-size
会从特定网址安装二进制文件,而网址被墙了,导致npm install
会报错
client JS
在开发模式下,可以看到入口JS,也就是第一个JS文件是
https://github.com/nuxt/nuxt/blob/v3.6.5/packages/nuxt/src/app/entry.ts
代码结构比较清晰,逻辑步骤分为:
- 创建APP实例
- 应用插件
- 挂载实例,依次执行插件的生命周期钩子
由于开发者在模块化方面做得比较出色,开发了不同的JS库来组成Nuxt框架,副作用是产生了在4个SSR框架对比中最臃肿的入口文件,文件内容包含以下库的客户端代码:
vue
ofetch
:封装的fetch库nitropack
:功能相当于gulp的开发工具ufo
:封装的url库hookable
:插件系统unctx
:组合式API管理ctx@unhead/vue
:组合式API写<head>
标签,适配vueh3
:自写的http框架
由于每个库都是独立的模块,因此它们会存在重复的工具函数代码,这些代码相互独立没有复用,造就了最大的入口文件。