Swift Web 介绍

Swift Web 是一套面向内部业务项目的 Nuxt 4 全栈框架,由脚手架 CLI、核心框架模块、Starter 工程模板和 Standards 规范包四部分组成,旨在为团队提供统一的技术基线与开发规范,让每个项目都能快速启动并保持一致的工程质量。

为什么选择 Swift Web

Swift Web 不是「又一个组件库加模板」,它带着三个明确的设计目标,每一个都对应旧框架的真实痛点:

性能:ISR 缓存为主力,告别 CPU 100%

旧框架所有页面实时 SSR,访问量一大 Node 服务器 CPU 经常打满。Swift Web 把渲染策略提为一等公民——每个页面必须显式声明 ISR / SSR / CSR / SSG 四选一(ESLint 强制,漏写不让合并),以 ISR 缓存承接绝大多数流量,仅必要时走完整 SSR。性能不靠事后调优,而是在每个页面诞生时就被强制决策。

核心能力统一管理,升级一次全项目受益

加密请求、自动登录链路、分片上传、SEO 全家桶、统一埋点、广告底座……这些跨项目重复造的能力全部收进 @swift-web/framework 统一维护,业务项目升级一次依赖即可获得新能力与修复。同时不牺牲业务自由度:组件全部无样式(视觉由业务自定)、扩展靠薄封装而非 fork 改源码,框架升级永远不会变成合并地狱。

AI 友好:为 AI 辅助开发设计的工程约束

这是 Swift Web 含金量最高的部分。框架从第一天起就按「AI 是主力开发者之一」来设计规则——清晰、严格、机器可校验,让 AI 在护栏内稳定产出可预测的代码:

  • 规范单一事实源:开发规范集中在 @swift-web/standards,sync 注入每个仓库的 CLAUDE.md,Claude Code / Cursor / Copilot 开箱即读,不靠口口相传
  • AI 工具链零配置:sw create 生成的项目自带 .mcp.json 与完整 AI 约定文件,新项目第一分钟就能让 AI 正确干活
  • 规则配机械兜底:渲染策略必填、SEO 必填、根 class 与文件名严格映射、缓存必须走加密 util……关键规则都有配套 ESLint / Stylelint / commit hook 拦截,AI 写错当场报错,而不是靠人工 review 兜底
  • MR 自动 AI review:提 MR 触发 bot 整单审查 + inline 评论,验证通过自动合并,AI 写的代码由 AI 先审一遍

一句话:别的框架解决「人怎么写得快」,Swift Web 同时解决「AI 怎么写得对」。

四大组成部分

Swift Web 生态

@swift-web/cli        命令行脚手架(发布在私有 npm)
  └─ sw create / add / config / info / upgrade / run

@swift-web/framework  核心框架模块(发布在私有 npm)
  └─ 组件 / Composable / Store / 插件 / 中间件 / 模块选项

@swift-web/starter    项目工程模板(发布在私有 npm,仅供 cli 拉取,业务方不直接装)
  └─ sw create 时用 `npm pack @swift-web/starter` 拉最新版本

@swift-web/standards  生态规范单一事实源(发布在私有 npm)
  └─ 开发规范 rules / ESLint / Prettier / Stylelint 可分发配置 / commit-msg 校验

@swift-web/cli

命令行工具,bin 名称为 sw。负责项目初始化、文件生成、配置管理、脚本执行、AI 集成和版本升级检查。全局安装一次,对所有项目生效。

pnpm add -g @swift-web/cli
sw create YC001-WEB-我的项目
sw add page product-detail
sw upgrade

@swift-web/framework

Nuxt Module 形式的核心框架,通过 modules: ['@swift-web/framework'] 接入。提供所有项目共用的基础能力,版本统一管理,升级一次全项目受益。

框架内置能力速览:

类别数量内容
组件(Sw*)40+ 个基础 UI(SwButton/SwImage/SwLink…)、媒体(SwVideoPlayer 等)、容器(SwRail/SwCarousel/SwVideoFeed)、广告底座(12 个 SwAd*)、富文本、二维码、上传 等
Composable15 个useModal、useToast、useTheme、useLoginCheck、useSeo、useTracker、useExposure 等
Store2 个useUserStore、useSystemStore
插件9 个request、system.server、system.client、auth.client、console、error-handler、pwa-cleanup、tracker、websocket
路由守卫2 个login.global、guest.global
模块选项15 项theme、i18n、pwa、auth、obfuscate、websocket、errorHandler、styles、systemInfo、suppressConsole、image、manualChunks、request、seo(含 sitemap 排除)、tracker

@swift-web/starter(项目模板)

starter 是 npm 包(发布到 verdaccio 私服 npm.djatm.cloud),但不给业务消费方直接装 —— 由 sw create 在运行时用 npm pack @swift-web/starter 拉最新快照。包含完整的 Nuxt 4 工程配置、CI/CD 脚本(GitLab CI + PM2)、ESLint / Stylelint 规则(消费 @swift-web/standards base)、Vitest 单元测试与 Playwright E2E 骨架——无需手动配置。

@swift-web/standards(规范)

生态规范的单一事实源:开发流程 SOP、AI 协作约定、commit / 分支规范等集中维护在 rules/,通过 sync 注入 framework / starter / docs 及各业务项目的 CLAUDE.md,保证所有仓库读到同一份规则;同时发布可分发的 ESLint / Prettier / Stylelint base 配置与 commit-msg 校验脚本,各项目以 import base from '@swift-web/standards/eslint' 方式消费。规则升级只改主源发一次版,全生态升级依赖即生效。详见 开发规范。

框架能力详解

40+ 个内置组件

所有框架组件统一使用 Sw 前缀,通过 Nuxt 自动导入,无需手动 import。按家族分组:

基础 UI

组件说明
SwButton基础按钮,支持多种变体
SwLink智能链接,自动区分内外链、自动处理 rel
SwIcon业务 SVG 图标渲染
SwImage图片优化,自动生成 WebP/AVIF srcset,防 CLS
SwAsyncText异步加载远程文本(.bnc 自动走 AES 解密,普通 URL 直接当 UTF-8 读取)
SwFormField表单字段容器,集成 vee-validate
SwBreadcrumb面包屑导航(headless,items 驱动,可选发 BreadcrumbList JSON-LD)
SwSegmented平铺单选(segmented / pill),自带方向键 a11y
SwSelect下拉单 / 多选,可清空、可分组
SwPagination页码翻页(受控 v-model:page)

弹层与反馈

组件说明
SwModal / SwModalHost全局弹窗系统
SwToast全局消息提示

媒体播放

组件说明
SwVideoPlayer / SwAudioPlayer / SwVideoPreview视频 / 音频播放器(HLS 支持)

横排 / 轮播 / 视频流(按"内容怎么流动"选)

组件说明
SwRail横向滚动横排(scroll-snap,无 loop)
SwCarousel整屏切换轮播 banner(无缝 loop + autoplay)
SwVideoFeed竖向短视频流(整屏一条 + 虚拟化 + 视频池)
SwGallery换行等高网格 + 加载更多(button / auto / none 三态)

上传 / 二维码 / 富文本

组件说明
SwUploadFile / SwUploadImage / SwUploadVideo文件上传组件(普通文件 / 图片 / 视频)
SwQrcodeGenerator / SwQrcodeScanner二维码生成与扫描
SwEditor富文本编辑器

广告底座(自渲染 + 内置曝光 / 点击埋点,详见 广告组件与埋点;通用打点见 打点底座)

组件说明
SwAdBanner / SwAdPopup / SwAdMrec / SwAdNative主力广告位
SwAdSplash进站 / 开屏自动弹(App-Open / Splash,频控)
SwAdPreroll视频前贴片(放播放器 #preroll-ad slot,挂载即报曝光)
SwAdPause视频暂停广告(放播放器 #pause-ad slot)
SwAdText / SwAdMarquee / SwAdFloating / SwAdIcon / SwAdLabel文字 / 跑马灯 / 侧边 / 图标 / 标签广告位

主题 / 语言

组件说明
SwThemeSwitch主题切换器(配合 useTheme;仅 theme.mode: 'toggle' 时渲染,自 gate)
SwLangSwitch语言切换器(读 i18n.locales 自动联动;i18n 关 / 单语言不渲染,自 gate)

PWA 引导

组件说明
SwAddToHomescreenGuide添加到主屏引导(A2HS)

17 个 Composable

// 登录与鉴权
useLoginCheck() // 检查登录态,未登录跳转
useLoginBy() // 多方式登录(手机号/账号密码等)
useLoginDialog() // 弹出登录对话框
useAuthReady() // 等待登录流程结束(device + 凭证尝试都跑过)

// UI 交互
useModal() // 命令式弹窗
useToast() // 消息提示(成功/错误/警告)

// 媒体 / 上传 / 解密
useUploader() // 文件分片上传
useDecryptedAsset() // 加密资源(.bnc)解密 + IndexedDB 缓存

// 主题
useTheme() // 主题管理(mode 感知:resolvedTheme + toggle/system/dark/light;无条件注册)

// SEO
useSeo() // 统一 SEO 入口(og / canonical / JSON-LD / robots)

// 埋点与广告
useTracker() // 集团 WebSDK 统一埋点(track 自定义事件)
useAdTrack() // 广告曝光 / 点击埋点字段自动组装
useAdFrequency() // 广告展示频率控制(加密缓存)
useExposure() // 通用进视口一次性曝光检测(内容卡片曝光埋点 / 自有 SDK 逃生舱)

// PWA
useAddToHomescreen() // 添加到主屏(A2HS)能力探测与触发

// 交互 / 导航
useHoverPreview() // 卡片 hover 放大浮层预览的机制层(意图判定 + 定位纯函数)
useExternalRedirect() // 外链中转页:白名单校验 + noindex + 倒计时跳转
useVideoPlayerPrefs() // 播放器偏好:跳过片头片尾 / 自动播放下一集

useLocal / useSession(加密本地缓存)归为工具函数;useUserStore / useSystemStore 是全局 Store,见下两节。

2 个全局 Store

useUserStore() // 用户信息(登录态、token、用户资料)
useSystemStore() // 系统信息(服务端注入的全局配置)

9 个插件

插件运行环境功能
request通用初始化 API 请求客户端,注入 $request
system.server服务端SSR 期拉 /system/info 写入 systemStore
system.client客户端SSR 失败时 client 兜底重拉
auth.client客户端device + auth 身份唯一建立点(hydrate 后)
console通用生产环境禁用 console.log/warn(suppressConsole 开启时注入)
error-handler.client客户端全局错误捕获与上报
pwa-cleanup.client客户端dev 模式清理上一个项目残留的 Service Worker(防 localhost 缓存劫持)
tracker.client客户端集团 WebSDK 埋点底座(懒加载 init + 自动 pageView;tracker 开启时注入)
websocket.client客户端注册 $ws,支持断线重连(websocket 开启时注入)

15 个模块选项

通过 nuxt.config.ts 中的 swiftConfig 键配置(完整字段参考见 framework/module-options):

swiftConfig: {
  theme: { mode: 'toggle' },                          // 主题模式(system/toggle/dark/light)
  i18n: { enabled: true, defaultLocale: 'zh-CN' },   // 多语言
  pwa: true,                                          // PWA
  auth: {                                             // 路由守卫 + client auth init
    guardedPaths: ['/mine'],
    guestPaths: ['/login', '/register'],
  },
  obfuscate: true,                                    // JS 混淆(生产默认开启)
  websocket: true,                                    // WebSocket 客户端
  errorHandler: { enabled: true, endpoint: '/_error-report' },  // 全局错误监控
  styles: { reset: true, responsive: true },          // CSS 基础层注入开关
  systemInfo: true,                                   // /system/info 拉取(false / 对象 可选)
  suppressConsole: true,                              // 生产环境禁用 console
  image: { provider: 'noop' },                        // SwImage provider 路由
  manualChunks: {},                                   // Vite 自定义分包
  request: { timeout: 20_000 },                       // $request 全局超时 / 全局 headers
  seo: {                                              // SEO 套件(永久启用)
    aiBotPolicy: 'allow',                             // AI 训练爬虫策略('allow' | 'disallow')
    sitemap: { exclude: ['/preview/**'] },            // sitemap 追加排除路径(私有路径已默认排除)
  },
  tracker: true,                                      // 集团统一埋点底座(配置缺失自动降级静默)
}

项目架构

项目目录/
├── app/
│   ├── components/      业务组件(PascalCase 命名)
│   ├── pages/           路由页面(kebab-case 命名)
│   ├── layouts/         布局文件(全小写命名)
│   ├── composables/     业务级 composable
│   ├── store/           业务级 Pinia store
│   ├── api/             API 模块(按功能分文件)
│   ├── assets/          CSS 变量、全局样式
│   └── plugins/         业务级插件
├── public/
│   └── images/          图片源文件(jpg/png/webp/svg)
├── i18n/                多语言翻译文件(zh-CN/zh-TW/en)
├── server/              Nitro 服务端 API
├── .env                 本地环境变量(不提交 git)
├── nuxt.config.ts       Nuxt 配置(含框架模块选项)
└── swift.config.json    Swift Web 项目元数据

分层原则

┌─────────────────────────────────────────┐
│           业务层(starter)              │
│   app/pages → app/components → app/api │
│              ↓ 使用(自动导入)          │
├─────────────────────────────────────────┤
│          框架层(framework)             │
│   Sw* 组件 / use* composable / store   │
│      不得反向引用业务层内容              │
└─────────────────────────────────────────┘

集成的第三方模块

框架自动安装并配置以下模块,业务项目无需重复配置:

模块用途注册方式
@pinia/nuxt全局状态管理始终
@vueuse/nuxt常用组合式工具函数始终
@nuxt/fonts字体优化加载始终
@nuxt/scripts第三方脚本懒加载始终
@nuxtjs/sitemap动态 sitemap.xml 生成始终(SEO 强制启用)
@nuxtjs/robotsrobots.txt 生成(含 AI bot 策略)始终(SEO 强制启用)
nuxt-schema-orgJSON-LD 结构化数据始终(SEO 强制启用)
@nuxtjs/i18n多语言国际化i18n.enabled 开启时
@vite-pwa/nuxtPWA 支持framework.pwa 为 true 时(严格布尔)

适用场景

Swift Web 专为内部业务项目设计,适合:

  • 后台管理系统
  • 面向用户的 Web 应用(内容平台、会员系统等)
  • 需要 SEO 的营销页面或落地页
  • 有多语言需求的国际化应用

前置要求

依赖版本要求
Node.js^20.19.0 || >=22.12.0(不含 21)
pnpm>= 11(engines 硬性要求,低版本 install 直接报错)
私有 npm 仓库访问权限需配置 .npmrc(见快速开始)

下一步