中途参加了一个使用 Nuxtjs(v2.15.7)开发客户管理 APP 的团队,本人有 React/Nextjs 开发经验,一开始就是看看文档照猫画虎写点页面,稍微深入了解项目之后对于如何配置 Nuxtjs 渲染方式产生了一点疑问,求指点。
项目当前的情况:
-
nuxt.config.js内的相关配置为ssr: false, target: "static", generate: 未配置 - Docker 化时候用的是
npm run generate,启动命令npm start。并没有做只拷贝 dist 目录等减少镜像体积的优化,所有文件原封不动塞到镜像里然后部署到 K8s - 使用了动态路由(/post/_id),而且可以正常显示
想问一下这种情况下项目跑在何种模式下( ssr,ssg,spa )?
下面是问题发现的过程,有点长:
由于这个项目部署到 K8s 而不是 CDN ,最初我认为采用的是 SSR 模式。当时遇到个情况是每次 CI 在 build 阶段都要针对不同环境( dev,test,prod...)生成多个镜像,差别只是环境变量不同。我想直接利用 runtimeConfig 把这些变量放到 pod 里的话 CI 做一个镜像就够了。但是尝试失败。
后来我看了 nuxtjs 配置文件,意识到我理解错了,项目采用的应该是 SSG 方式,确实看 generate 日志也是生成了每个页面的文件,静态文件的话当然是无法从环境读取变量,只有 build 阶段替换了。
再后来我发现另外一个开发人员使用了 dynamic route(/post/_id 这样的路由,id 是动态变化的,无法在 build 时从数据库获取,而且 generate 也没配,之前已经开发的部分没用过动态路由)。我想 SSG 模式下动态路由会被忽略不生成,我就提醒他说可能页面没法用。但是现实打脸,部署后可以正常访问。
于是我看了访问页面时返回的 html ,发现所有页面都只有一个id="__nuxt"节点,这种情况应该是 fallback 到 SPA 了吧,感觉是每个页面被单独做成了一个 SPA ?如果是这样的话 generate 就完全是多余的。
那么,npm start启动 Nuxt 服务器的时候到底是如何处理的?会检查已经 generate 好的文件吗?