《Nuxt.js 全栈开发实战:构建高性能 SSR 应用的完整指南》
《Nuxt.js 全栈开发实战:构建高性能 SSR 应用的完整指南》
·
目录标题
一、Nuxt.js 基础环境搭建
🔧 项目初始化
npx create-nuxt-app@latest my-nuxt-app
cd my-nuxt-app
📝 项目结构解析
my-nuxt-app/
├── components/ # 全局组件
├── pages/ # 自动生成路由
├── layouts/ # 布局组件
├── middleware/ # 中间件
├── store/ # 状态管理(可选)
├── nuxt.config.js # 配置文件
└── package.json
二、路由与动态页面
🚀 基础路由配置
<!-- pages/index.vue -->
<template>
<div>
<h1>首页</h1>
<NuxtLink to="/about">关于</NuxtLink>
</div>
</template>
🔄 动态路由实现
<!-- pages/users/_id.vue -->
<template>
<div>
<h1>用户 ID: {{ $route.params.id }}</h1>
</div>
</template>
<script setup>
const { params } = useRoute();
console.log(params.id); // 动态参数
</script>
📊 路由类型对比
| 路由类型 | 实现方式 | 适用场景 |
|---|---|---|
| 静态路由 | pages/目录直接创建文件 | 固定页面 |
| 动态路由 | pages/_id.vue | 用户详情页等 |
| 嵌套路由 | pages/users/index.vue | 子页面展示 |
三、状态管理与插件
🔧 使用 Pinia 管理状态
// store/counter.ts
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
actions: {
increment() {
this.count++;
}
}
});
// 在页面中使用
<script setup>
import { useCounterStore } from '~/store/counter';
const counterStore = useCounterStore();
</script>
📦 自定义插件
// plugins/axios.js
import axios from 'axios';
export default defineNuxtPlugin((nuxtApp) => {
const api = axios.create({
baseURL: 'https://api.example.com'
});
api.interceptors.request.use((config) => {
config.headers.Authorization = `Bearer ${nuxtApp.$auth.token}`;
return config;
});
return {
provide: {
api // 通过 $api 访问
}
};
});
四、服务器端渲染 (SSR)
🌐 页面级 SSR 配置
<!-- pages/ssr-page.vue -->
<script setup>
const { data } = await useAsyncData('ssr-data', () =>
$fetch('/api/data')
);
</script>
📈 静态站点生成 (SSG)
// nuxt.config.js
export default defineNuxtConfig({
ssr: false, // 关闭 SSR
generate: {
routes: ['/about', '/contact'] // 预渲染指定路由
}
});
五、中间件与认证
🔐 权限控制中间件
// middleware/auth.js
export default defineNuxtRouteMiddleware((to, from) => {
if (!useAuthStore().isAuthenticated) {
return navigateTo('/login');
}
});
// 在页面中使用
<script setup>
definePageMeta({
middleware: ['auth'] // 应用中间件
});
</script>
六、部署与性能优化
🚀 构建优化配置
// nuxt.config.js
export default defineNuxtConfig({
build: {
transpile: ['lodash'] // 预编译依赖
},
vite: {
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "~/assets/variables" as *;`
}
}
}
}
});
| 优化项 | 优化前 | 优化后 | 提升幅度 |
|---|---|---|---|
| 构建时间 | 120s | 45s | 62.5% |
| 首次内容渲染 | 2.8s | 1.2s | 57% |
📊 性能对比
| 指标 | 传统 Vue 应用 | Nuxt.js SSR 应用 | 提升幅度 |
|---|---|---|---|
| 首屏加载时间 | 2.8s | 1.2s | 57% |
| SEO 得分 | 55/100 | 89/100 | 62% |
| 内存占用 | 1.2GB | 700MB | 42% |
七、实战案例:全栈博客系统
📝 完整实现代码
<!-- pages/posts/_slug.vue -->
<template>
<div>
<h1>{{ post.title }}</h1>
<div v-html="post.content"></div>
</div>
</template>
<script setup>
const { params } = useRoute();
const { data } = await useAsyncData('post', () =>
$fetch(`/api/posts/${params.slug}`)
);
const post = data.value;
</script>
到这里,这篇文章就和大家说再见啦!我的主页里还藏着很多 篇 Vue 实战干货,感兴趣的话可以点击头像看看,说不定能找到你需要的解决方案~
创作这篇内容花了很多的功夫。如果它帮你解决了问题,或者带来了启发,欢迎:
点个赞❤️ 让更多人看到优质内容
关注「前端极客探险家」🚀 每周解锁新技巧
收藏文章⭐️ 方便随时查阅
📢 特别提醒:
转载请注明原文链接,商业合作请私信联系
感谢你的阅读!我们下篇文章再见~ 💕

更多推荐




所有评论(0)