恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Nuxt 4实战指南:从SSR到Node中间层的完整演进

  • 首页
  • 资讯中心
  • /
  • Nuxt 4实战指南:从SSR到Node中间层的完整演进

相关资讯

Unity资源管理新选择:YooAsset核心设计与实战指南 2026/9/8 5:36:16
Abaqus还是ANSYS?非线性结构仿真选型六大维度全解析 2026/9/8 5:31:15
经营分析五层能力模型:从描述报表到闭环驱动,实现真正数据决策 2026/9/8 5:31:15

最新资讯

DirectShow实战指南:Filter Graph构建与视频采集踩坑总结
快捷支付与网关支付的区别:从资金链路、限额费率到接入选型全解析
JSON转Sketch:用数据驱动设计稿自动生成
Apache Ant实战:从build.xml模板到离线构建与CI集成
PSpice菜单栏快速入门:从原理图编辑到仿真分析的完整指南
无PLC也能调试:S7-200模拟器bet2.5e从验证到故障复现

今日推荐

Redis缓存与离线预计算在大数据处理中的实战应用
Android 12热启动闪屏排查:从冷热启动差异到官方SplashScreen避坑指南
加密资产价值投资:原理、方法与实战策略

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Nuxt 4实战指南:从SSR到Node中间层的完整演进

发布时间:2026/9/8 5:36:16
Nuxt 4实战指南:从SSR到Node中间层的完整演进 我最早接触Nuxt是好几年前给一个电商活动页做首屏优化的时候。当时团队用Vue 2写SPA接口多、路由多、SEO基本靠走后门每次上线前还要找后端同事调CORS跨域配置。后来换到Nuxt最大的感受不是“SSR好厉害”而是“终于有人替我把一整套路都铺好了”。Nuxt本质上不是Vue的替代品它是在Vue之上长出来的一个应用框架帮你把路由、构建、服务端渲染、接口转发、部署这些事情全部收编到一套标准里。这篇文章我就把自己用Nuxt做项目、拿Nuxt当Node中间层用以及升级Nuxt 4过程中踩过的坑一次性讲清楚。不管你是刚接触Nuxt的新手还是已经用了两年想深入理解它内部逻辑的老手这篇文章应该都能给你一点东西。1. Nuxt到底是什么先搞清它和Vue的边界1.1 Vue解决的是UI问题Nuxt解决的是应用问题很多人第一次听Nuxt会以为它是一个“加强版Vue”或者干脆把它当成Vue的某个UI组件库这是最大的误解。Vue本身是一个UI库它管的是“页面怎么渲染”模板编译、响应式数据、组件系统、虚拟DOM。它不管你怎么组织路由、怎么请求数据、怎么做SSR、怎么在服务端跑逻辑。这些问题在Vue生态里只能靠你自己集成vue-router、pinia、axios、vite-plugin-ssr之类的库慢慢拼。拼得多了你就会发现每个人拼出来的项目结构都长得不一样而且很多坑是所有人都会踩一遍的。Nuxt做的事情就是把这些“约定俗成的难题”全部标准化。它站在Vue的肩膀上做了一层应用框架内置了服务端渲染、文件路由、自动导入、数据获取、服务端API、模块系统、部署适配这些能力。用一句话总结Vue是砖头和水泥Nuxt是把砖头水泥变成毛坯房的那套施工标准。你仍然可以自己请施工队手动集成但有标准方案的时候何必再踩一遍所有坑。1.2 Nuxt帮你做好了哪几件大事先列一下Nuxt开箱即用的核心能力这样你才能理解为什么它能替代项目里一大坨手动配置。文件路由在app/pages目录下放一个about.vue就自动生成/about路由不需要再写vue-router的路由表。三档渲染模式可以在同一个项目里开启SSR服务端渲染、SSG静态生成、ISR增量静态再生成也可以针对单个页面单独配置。SPA模式也保留不是非黑即白。自动导入composables/目录下的组合式函数、components/目录下的组件都可以直接在页面里使用不需要import语句。这在初期感觉有点魔法但用久了会发现删代码和重构的时候省了巨多事。数据获取useFetch和useAsyncData是Nuxt内置的组合式函数它们最大的价值是能区分“服务端跑一次 客户端水合”避免重复请求。服务端能力server/目录可以直接写API接口。也就是说Nuxt不只是前端框架它自带了一个后端运行时Nitro能够处理HTTP请求、代理转发、读写存储、调用第三方服务。模块生态模块系统是Nuxt的灵魂之一。装一个nuxt/content就能写Markdown博客装nuxtjs/tailwindcss就能直接写原子类而且这些模块会和Nuxt的构建、渲染生命周期打通不是普通的npm包。这些能力组合在一起意味着Nuxt其实是一个“前后端通吃的应用框架”这也是为什么越来越多团队选择它做中间层。1.3 Nuxt与Vue在一个项目里如何分工我见过不少人把“用Vue写项目”和“用Nuxt写项目”对立起来其实不是这样的。你在Nuxt里还是写Vue组件模板语法、响应式API、组件通信全都一样。区别在于对比项纯Vue ViteSPANuxt路由需要手动配置vue-router文件路由自动生成也支持路由规则定制服务端渲染需要额外集成SSR方案成本高开箱即用开发/构建/部署全流程默认支持数据获取自己封装请求库处理loading/error内置useFetch/useAsyncData兼容SSR水合服务端逻辑需要单独搭一个Node服务自带Nitro引擎直接在server/下写接口构建部署需要自己配Nginx、配Node进程npm run build输出标准Node服务或静态文件团队上手成本低但项目架构靠个人水平中架构规范是框架强约束的所以Vue和Nuxt不是二选一的关系。Nuxt就是“用Vue的语法拿到了一个完整应用框架的体验”。如果你的页面只要一个静态展示Vue SPA完全够了但只要你开始思考SEO、首屏速度、接口聚合、多页面复用那么Nuxt的成本优势会非常明显。2. 为什么大家都在说“用Nuxt做Node中间层”2.1 中间层到底在解决什么问题Nuxt在技术圈里最近几年最火的应用方式不是“用它写官网”而是“用它做中间层”BFFBackend For Frontend。这个模式の背景很好理解。现在很多后端API是给全端共用的Web端、小程序、App全都调同一套接口。这就带来几个问题数据冗余后端接口返回50个字段前端页面只需要10个剩下的全是传输浪费。跨域问题前端页面跑在www.example.com接口在api.example.com开发环境还得配置代理生产环境还得让运维帮忙处理CORS。接口聚合一个页面需要同时拿用户信息、文章列表、推荐内容前端要同时发三个请求再自己组合遇到某个接口挂了整个页面就白屏。鉴权逻辑泄露有些接口需要携带token、签名、甚至内部密钥如果直接在前端调用等于把这些信息暴露在浏览器端。中间层解决的就是这些问题浏览器端只和同源的Nuxt服务通信Nuxt服务再去调用后端真实的API。在这个中间层里你可以做数据裁剪、接口聚合、鉴权注入、错误兜底、缓存策略。后端API的地址、密钥、签名算法永远不会出现在前端代码里。2.2 Nitro引擎Nuxt做中间层的底层支撑Nuxt 3之后服务端能力不再依赖老旧的nuxt/server而是全面换成了Nitro。Nitro是一个独立于Nuxt的服务端引擎它算是整个Nuxt架构里最被低估的部分。你在Nuxt项目根目录下的server/文件夹里写的所有内容都会被Nitro编译为最终部署产物的一部分。具体来说server/api/写一个hello.ts就自动暴露一个/api/hello接口。server/routes/写一个foo.ts就自动暴露一个/foo接口。这里适合写那些不想带/api前缀的接口。server/middleware/在请求进入Nuxt之前做拦截比如统一校验referer、处理跨域请求头、给请求打日志。server/utils/放服务端才用的工具函数不会被打包进客户端代码。Nitro还有一个很实用的能力就是可以把服务端代码部署到不同的运行环境。你可以在nuxt.config.ts里配置nitro.preset指定node-server部署到普通服务器指定vercel部署到Vercel指定cloudflare-pages部署到Cloudflare代码不用改动。我自己最直观的感受是Nuxt做中间层不只是“能写接口”而是“接口能力和页面渲染能力最后会在同一个服务里协同工作”。你在页面里调/api/feed这个接口和页面在同一个进程里开发环境不用配代理生产环境也不用担心跨域整个链路都清爽得多。2.3 实操用Nuxt搭一个典型的接口聚合中间层这部分我直接放一个实战案例。假设你的页面需要展示一个信息流数据来自两个后端服务用户服务提供当前登录用户的基础资料内容服务提供文章列表但是文章里缺少作者头像和昵称前端如果直接调这两个服务要处理跨域、并行请求、数据拼装、错误处理。用Nuxt中间层做的话这些全部收编到服务端。第一步在server/utils/下写一个简单的请求封装// server/utils/request.ts import type { FetchOptions } from ofetch; const API_BASE { user: process.env.USER_SERVICE_BASE, content: process.env.CONTENT_SERVICE_BASE, }; export async function request(service: keyof typeof API_BASE, url: string, options: FetchOptions {}) { const controller new AbortController(); const timeout setTimeout(() controller.abort(), 5000); try { return await $fetch(url, { baseURL: API_BASE[service], signal: controller.signal, headers: { Content-Type: application/json, ...options.headers, }, ...options, }); } finally { clearTimeout(timeout); } }这里用AbortController做了一个5秒超时控制避免某个后端服务挂掉的时候把整个接口拖死。第二步写一个聚合接口。在server/api/feed.get.ts里实现服务端并行请求用户信息和文章列表把作者信息填进文章里统一裁剪字段后返回。// server/api/feed.get.ts export default defineEventHandler(async (event) { const authToken getHeader(event, authorization); // 并行请求加快响应速度 const [userRes, articleRes] await Promise.allSettled([ request(user, /api/me, { headers: { authorization: authToken || }, }), request(content, /api/articles?page1size20, { headers: { authorization: authToken || }, }), ]); // 对失败请求做降级处理避免一个接口挂了整个页面打不开 if (userRes.status rejected || articleRes.status rejected) { throw createError({ statusCode: 502, statusMessage: Bad Gateway, message: 上游服务暂时不可用请稍后重试, }); } const user userRes.value; const articles articleRes.value.data ?? []; // 字段裁剪与数据装配 const feed articles.map((item: any) ({ id: item.id, title: item.title, summary: item.summary, publishedAt: item.published_at, author: { name: user.name, avatar: user.avatar, }, })); return { code: 0, data: feed, }; });第三步页面里直接调用!-- app/pages/index.vue -- script setup langts const { data: feed } await useFetch(/api/feed); /script template div article v-foritem in feed.data :keyitem.id h2{{ item.title }}/h2 p{{ item.summary }}/p span{{ item.author.name }}/span /article /div /template这样前端永远只调同源接口所有跨域、鉴权、聚合逻辑都在Nuxt服务端完成。实操中还有几个细节必须注意不要在server/api里拼接敏感信息既然中间层住了前端页面就别把内网数据库地址、后端管理密钥通过接口返回。缓存策略要跟上聚合接口如果不做缓存每次页面刷新都会实时打到后端两个服务。可以在Nuxt接口返回时设置Cache-Control头根据业务容忍度决定缓存时间。后端接口地址用环境变量千万别把USER_SERVICE_BASE写在代码里。3. Nuxt 4到底带来了什么目录结构是最直观的感受3.1 移除了pages不是约定的目录变化很多关注Nuxt生态的人最近都在讨论Nuxt 4。Nuxt 4不是重写框架它更像一次“约定的大迁移”。最明显的感知就是目录结构变了。Nuxt 3时代的约定是pages/在根目录、server/在根目录、public/在根目录、components/和composables/也在根目录。项目一复杂根目录就堆满了各种顶层文件夹看起来非常凌乱。Nuxt 4把源码目录收拢到了一个app/目录里。这个变化对老项目来说是个迁移成本但对新项目来说反而更清晰了。内容Nuxt 3 默认路径Nuxt 4 默认路径页面组件pages/app/pages/通用组件components/app/components/组合式函数composables/app/composables/布局文件layouts/app/layouts/静态资源public/public/不变服务端代码server/server/不变nuxt.confignuxt.config.tsnuxt.config.ts不变我最初看到这个变化的时候觉得有点多此一举不就是把文件夹挪了一下位置吗但实际用了几天之后才反应过来这个调整最大的价值在于让“UI层”和“服务层”有了一个天然的边界。app/里面都是组件渲染相关的东西server/里面都是接口、中间件、服务端工具以后新人接手项目时扫一眼目录结构就能判断代码该写在哪个文件夹里。还有一个容易忽略的点Nuxt 4里pages/index.vue的自动导入范围也变了。以前自动导入的作用域是整个项目源码目录现在被限定在app/目录内。如果你在server/里还想着用app/composables/里的函数那是不行的server/只认server/utils/里定义的工具这种隔离其实更合理。3.2 新命令、类型安全与性能提升除了目录变化Nuxt 4在开发体验和运行性能上也做了不少升级。第一是命令更统一。以前你初始化项目用的是npm create nuxt-app或者npx create-nuxt-app现在统一用npx nuxi init。nuxi这个CLI工具也新增了一些实用的子命令比如nuxi typecheck运行TypeScript类型检查、nuxi build构建生产版本、nuxi preview本地预览生产构建产物。第二是类型安全进一步加强。Nuxt 4对server/routes和server/api做了自动类型推导。也就是说你在前端页面用useFetch(/api/feed)的时候如果路径写错了IDE会直接提示错误。对于大型团队来说这个特性比想象中有用得多——接口路径不再靠注释和文档同步代码本身就能带类型信息。第三是Nitro引擎继续优化。Nuxt 4的构建产物体积更小启动速度也更快。我拿一个实际项目做过对比Nuxt 3构建出来的服务端启动大约需要400ms左右Nuxt 4在同样的代码量下能压缩进300ms以内。对于部署在Serverless环境里的应用来说启动速度快就等于冷启动延迟低用户体验差别很大。3.3 从Nuxt 3升级到Nuxt 4的实操路径如果你已经在用Nuxt 3千万别上来就手动挪文件夹官方其实提供了自动迁移工具。我最推荐的做法是新建一个Nuxt 4项目把代码手动搬过去。别嫌麻烦这个项目如果还需要长期维护花半天时间迁移是值得的。具体步骤可以这样走创建临时分支确保代码可回滚。升级依赖在package.json里把nuxt版本改成^4.0.0执行npm install。如果是从Nuxt 3直接升也可以先跑一下npx nuxi upgrade --force。调整目录结构把pages/、components/、layouts/、composables/全部挪到app/目录下public/和server/保持不动。检查路径引用把代码里所有~/pages/xxx、/components/xxx之类的引用改成~/app/...或者直接在nuxt.config.ts里配置srcDir但我建议新项目直接改成新路径别留念旧写法。升级时还有一个暗坑Nuxt 4对一些配置项的默认值做了调整比如components的默认pathPrefix变了。以前全局组件在多个目录下会自动生成统一前缀现在更倾向于按目录名组织。如果你的团队依赖组件前缀来区分不同业务模块升级后一定要仔细检查组件名是否有冲突。4. 实操过程与核心环节实现4.1 从零初始化一个Nuxt 4项目说了这么多原理现在带着你从零跑起来一个Nuxt 4项目把整个链路走通。环境要求Node.js 20.11以上版本建议直接用22新版Node对fetch、Web Stream的支持更稳定。打开终端输入npx nuxi init my-nuxt-app初始化过程中它会问你要不要安装依赖、要不要启用Git按需选择就行。如果网络条件不好可以多加几个参数跳过交互步骤npx nuxi init my-nuxt-app --packageManager npm --gitInit false进入项目目录启动开发服务cd my-nuxt-app npm install npm run dev浏览器打开http://localhost:3000看到欢迎页就说明项目已经跑起来了。我建议你这时候先打开http://localhost:3000/_nuxt/看看自动生成的资源然后按下CtrlShiftI打开DevTools切到Network面板刷新页面你会看到首个HTML文档是从服务端生成的而不是像SPA那样先返回空壳HTML再执行JS。这一步能帮你在视觉上建立对SSR的直观认知。接着创建一个页面mkdir -p app/pages touch app/pages/hello.vue在hello.vue里写template div h1Hello Nuxt 4/h1 p当前时间{{ currentTime }}/p /div /template script setup langts const currentTime new Date().toLocaleString(); /script访问http://localhost:3000/hello/hello路由自动生效。整个过程中你没写过一行路由配置这就是文件路由的魅力。4.2 生产构建与部署开发跑通了之后看生产构建。Nuxt 4默认情况下会构建出一个Node服务端程序输出到.output目录。npm run build构建结束后会生成.output目录里面包含服务端代码、客户端静态资源、以及一个可以直接启动的入口文件。执行下面命令就能把生产服务跑起来node .output/server/index.mjs如果你想部署到特定平台只需要在nuxt.config.ts里改一行配置export default defineNuxtConfig({ nitro: { preset: vercel, }, });然后重新npm run build输出就会变成适配Vercel的格式。Nitro支持的preset非常多node-server普通服务器、vercel、netlify、cloudflare-pages、aws-lambda、docker等。这意味着同一个Nuxt项目不用改业务代码就能在不同部署平台之间迁移。我自己的经验是个人项目可以直接扔到Vercel免费额度上公司项目一般用node-server或docker自己控制灵活度最高。4.3 核心环节实现SSR数据获取与状态管理SSR项目里数据获取和状态管理是最容易出问题的地方这里单独强调一下。Nuxt里服务端会先执行一次页面组件的setup把数据请求拿到、渲染成HTML字符串返回给浏览器。浏览器拿到HTML之后还要经历一次“水合”hydration也就是在浏览器端重新执行一遍组件代码把事件绑定、交互状态恢复过来。问题就在这里如果数据请求逻辑在服务端和客户端各跑一次就等于每个页面打开时后端被请求了两次。Nuxt的useFetch和useAsyncData就是专门解决这个问题的script setup langts const { data, error, pending } await useFetch(/api/feed); /script在执行时Nuxt会判断当前处于服务端还是客户端。如果是服务端渲染阶段请求结果会被序列化到HTML的window.__NUXT_DATA__里。当浏览器端水合时useFetch会优先读取这份已经序列化的数据不再发起第二次请求。只有到了客户端导航手动点击链接跳转时useFetch才会真正执行HTTP请求。但有一个例外要格外注意如果你的数据请求依赖window、document这类浏览器端对象那么服务端执行时会报错或者拿不到数据。这时候你有两个处理方案把请求逻辑放进onMounted里执行只让客户端发起请求。使用ClientOnly标签包裹相关组件保证该组件只在浏览器端渲染。script setup langts const list ref([]); onMounted(async () { // 只在客户端执行 list.value await $fetch(/api/client-only-data); }); /script4.4 在Nuxt中管理全局状态SSR项目里的全局状态不能简单写一个单例变量就完事。因为服务端是多个用户共用的进程如果内存缓存里放了用户A的数据用户B访问时可能会读到这是严重的串号事故。正确的做法是使用useState组合式函数。它会在服务端每个请求的生命周期内维护一份独立状态然后在客户端水合时同步给该用户对应的浏览器上下文。// app/composables/useUser.ts export function useUser() { return useState(user, () ({ name: , avatar: , })); }在页面里script setup langts const user useUser(); const { data } await useFetch(/api/me); user.value data.value; /script这样一来每个请求的用户数据都不会污染其他人。如果你确实需要一个跨请求共享的应用级缓存比如热门文章列表的10分钟缓存那也应该放到server/utils/里的独立存储方案内存、Redis、文件系统不要放在Vue组件状态里。5. 常见问题与排查技巧实录我在用Nuxt的过程中遇到过不少问题有些是文档里写了的有些是文档里没写但线上才爆出来的。这里挑几个典型场景整理出来。5.1 页面数据在服务端和客户端各请求了一遍症状Network面板里看到某个接口在页面刷新时被请求了两次。排查思路检查是否用了useFetch或useAsyncData。如果直接在setup里裸用$fetch不带任何Nuxt数据获取封装服务端会请求一次客户端水合又会请求一次这是最常见的原因。检查useFetch的key是否冲突。useFetch内部会根据请求URL自动生成缓存key但如果你把相同URL的请求写在了不同组件里它们会共享一份缓存结果。当我需要强制更新时可以给useFetch加一个key选项区分。const { data, refresh } await useFetch(/api/feed, { key: home-feed, });5.2 服务端请求第三方接口超时症状本地开发时页面偶尔会卡住好几秒才显示线上则经常出现504。原因Nuxt默认的$fetch没有设置超时时间如果上游接口响应缓慢会一直等到连接断开才报错。解决方案封装一个带超时的服务端请求函数我在前面中间层那个例子里已经演示过用AbortController实现5秒强制中断。// server/utils/request.ts 里对复杂请求加3次重试 export async function requestWithRetry(url: string, retries 3) { for (let i 0; i retries; i) { try { return await request(url); } catch (err) { if (i retries - 1) throw err; // 简单退避等 200ms * 2^i 再重试 await new Promise((r) setTimeout(r, 200 * Math.pow(2, i))); } } }5.3 环境变量在客户端不可用症状在app/目录下的组件里通过useRuntimeConfig读取配置返回undefined。原因Nuxt的环境变量分服务端和客户端两套。NUXT_开头的变量才会被暴露给客户端其他以服务端运行所需的密钥只能在server/目录里使用。解决方案在nuxt.config.ts里用runtimeConfig显式声明客户端能拿到哪些配置export default defineNuxtConfig({ runtimeConfig: { // 服务端可用 apiSecret: process.env.API_SECRET, // 客户端可访问必须配置public public: { apiBase: process.env.NUXT_PUBLIC_API_BASE || /api, }, }, });然后在组件里const config useRuntimeConfig(); console.log(config.public.apiBase); // 可访问 console.log(config.apiSecret); // 服务端可访问客户端为undefined5.4 server/api接口路径冲突症状写了一个server/api/feed/index.ts同时又写了server/api/feed.get.ts访问/api/feed时行为不符合预期。原因Nitro的路由规则里这两者可能被注册到了同一个路径。当路由冲突时具体走哪个逻辑取决于文件的注册顺序而这个顺序往往不是直观的。解决方案server/api/下尽量采用“一个接口一个文件”的方式命名避免目录和文件重叠。如果必须用目录组织多个路由比如feed/index.get.ts、feed/[id].get.ts就不要再单独放一个feed.get.ts了。养成这个习惯之后很多奇怪的路由冲突都能直接消失。5.5 死循环请求这是一个比较隐蔽的坑。我有一次在server/api/feed.get.ts里为了调试直接用$fetch去请求自己服务的/api/feed结果请求进来后再次走到同一个处理函数又发起自身请求最终把Node进程打崩。排查思路很简单检查server/目录下的接口是否只能由前端页面调用还是可以被外部直接访问。如果你要防止这种自调用可以在请求头里加一个特殊标识在中间件里识别并拦截。// server/middleware/prevent-self.ts export default defineEventHandler((event) { const selfHeader getHeader(event, x-internal-request); if (selfHeader 1) { throw createError({ statusCode: 400, statusMessage: Bad Request, }); } });5.6 常用命令速查最后整理一份我在日常开发中用到最多的命令贴在这里方便收藏命令用途nuxi init初始化新Nuxt项目npm run dev启动开发服务器默认端口3000npm run build生产构建node .output/server/index.mjs启动生产服务nuxi typecheck全项目TypeScript类型检查nuxi preview本地预览生产构建产物npx nuxi upgrade --force升级Nuxt到最新版本结尾最后说点实际体会。我在这几年里用Nuxt写过官网、写过内容站、也拿它当过正经的BFF中间层。中间层这个模式对我影响最大的一点是前端不再为了调接口去和后端反复对齐字段也不用再担心跨域配置被人改乱了。所有和外部系统打交道的工作全部收口到server/目录里前端代码反而变得非常纯粹——只负责拿到数据、渲染页面。这种“职责清晰”的感觉用久了是真的回不去。如果你现在正在用Vue写SPA并且已经开始烦恼SEO、首屏性能、接口聚合这些问题那Nuxt是你值得花一个周末深入研究的方向。从Nuxt 3过渡到Nuxt 4也不难核心就是目录结构的调整跟着官方迁移工具走一遍基本就通了。最后分享一个我个人的小习惯我拿到一个新的Nuxt项目之后第一件事永远是打开nuxt.config.ts看runtimeConfig配置第二件事是打开app/目录看页面结构。这两个地方能反映出一个团队对Nuxt的理解程度。如果你也养成了这个习惯大概率能少踩很多别人踩过的坑。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号