You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt 3单项目如何承载多域名站点并实现页面隔离与资源复用?

结论

完全可以基于单个Nuxt 3项目实现多独立域名站点承载,满足页面资源隔离、公共代码复用的需求。Nuxt 3底层的Nitro服务引擎、路由系统、分层架构能力原生支持这类多站点场景,不需要拆分多个独立代码仓库。

可行落地方案

方案1:域名映射 + 路由分层(轻量场景首选)

这个方案改造成本最低,适合站点数量在5个以内、页面结构差异不大的场景,实现逻辑很直接:

  • 先在项目内维护统一的站点配置映射表,把每个域名对应的站点ID、页面目录、静态资源路径、功能开关、SEO配置全部统一维护:
// config/sites.ts
export const siteMap = {
  'websitea.com': {
    id: 'a',
    pageRoot: 'pages/site-a',
    assetRoot: '/static/a',
    siteTitle: '站点A',
    enableVipModule: true
  },
  'websiteb.com': {
    id: 'b',
    pageRoot: 'pages/site-b',
    assetRoot: '/static/b',
    siteTitle: '站点B',
    enableVipModule: false
  },
  'websitec.com': {
    id: 'c',
    pageRoot: 'pages/site-c',
    assetRoot: '/static/c',
    siteTitle: '站点C',
    enableVipModule: true
  }
} as const
  • 写一个全局服务端中间件,请求进来时读取event.node.req.headers.host匹配对应站点配置,挂载到事件上下文,再通过useState把站点信息同步到客户端,封装一个useCurrentSite()的composable供全项目调用。
  • 页面隔离直接按目录拆分:不同站点的页面放到各自独立的pages子目录下,加全局路由守卫做拦截,比如访问websitea.com时只允许匹配site-a目录下的路由,其他路径直接返回404,从访问层切断跨站点页面的访问路径。静态资源也按站点分目录存放,渲染时只加载当前站点对应目录下的资源。
  • 公共的components、composables、utils直接放在Nuxt默认的对应目录下,所有站点可以直接复用,不需要额外处理。

方案2:Nuxt Layers 分层架构(中大型场景首选)

如果各站点功能、页面差异较大,后续还要持续新增站点,直接用Nuxt原生的Layers能力做架构隔离,是官方推荐的长期维护方案:

  • 项目根目录只保留公共层代码:通用组件、共享composables、工具函数、全局配置(比如请求封装、权限逻辑、全局样式),作为所有站点的基础依赖。
  • 在项目内新建layers/site-a、layers/site-b、layers/site-c这类独立层目录,每个层内部就是完整的Nuxt子项目结构,有自己独立的pages、static、store,甚至专属的组件、逻辑,不同层之间的代码天然隔离,不会互相引用。
  • 在nuxt.config.ts里根据当前请求的域名动态加载对应站点层,核心配置参考:
// nuxt.config.ts
const currentDomain = process.env.NUXT_PUBLIC_CURRENT_DOMAIN
export default defineNuxtConfig({
  // 全局公共配置统一写在这里
  extends: [
    currentDomain === 'websitea.com' ? './layers/site-a' :
    currentDomain === 'websiteb.com' ? './layers/site-b' : './layers/site-c'
  ]
})
  • 部署时既可以配合CI流程,构建时传入不同的域名环境变量,打出每个站点独立的构建产物;也可以在运行时动态匹配加载对应层。这个方案的隔离性远好于第一种,各站点的专属代码不会进入其他站点的构建包,产物体积更优。

方案3:Nitro 多入口构建(极致性能/稳定性场景)

如果对站点隔离性、响应性能要求最高,不想在运行时做多余的域名判断逻辑,可以直接用Nitro的多入口能力实现:

  • 保留根目录公共代码的同时,把每个站点的独立页面、资源放到专属目录下。
  • 在Nitro配置里定义多入口规则,每个入口绑定对应域名,构建时Nitro会自动把公共代码抽成共享chunk,每个站点的独立代码单独打包。线上请求进来时直接路由到对应入口处理,完全没有运行时的路由判断开销。
  • 这个方案的构建产物天然隔离,单个站点的代码故障不会影响其他站点运行,适合对SLA要求很高的多站点运维场景。
落地注意事项
  • 客户端存储(Cookie、LocalStorage、SessionStorage)要做隔离,写存储key时带上当前站点的唯一标识,避免同部署环境下多域名的存储串读。
  • SEO相关的meta信息、sitemap、robots.txt必须根据当前请求域名动态返回,不要写死全局统一配置。
  • 如果用SSG模式部署,构建时遍历所有站点配置,分别生成每个域名对应的静态资源目录,部署时把不同域名的根路径指向对应生成目录即可。

内容的提问来源于stack exchange,提问作者Keith Petrillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 06:46:04