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*)、富文本、二维码、上传 等 |
| Composable | 15 个 | useModal、useToast、useTheme、useLoginCheck、useSeo、useTracker、useExposure 等 |
| Store | 2 个 | 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/robots | robots.txt 生成(含 AI bot 策略) | 始终(SEO 强制启用) |
nuxt-schema-org | JSON-LD 结构化数据 | 始终(SEO 强制启用) |
@nuxtjs/i18n | 多语言国际化 | i18n.enabled 开启时 |
@vite-pwa/nuxt | PWA 支持 | framework.pwa 为 true 时(严格布尔) |
适用场景
Swift Web 专为内部业务项目设计,适合:
- 后台管理系统
- 面向用户的 Web 应用(内容平台、会员系统等)
- 需要 SEO 的营销页面或落地页
- 有多语言需求的国际化应用
前置要求
| 依赖 | 版本要求 |
|---|---|
| Node.js | ^20.19.0 || >=22.12.0(不含 21) |
| pnpm | >= 11(engines 硬性要求,低版本 install 直接报错) |
| 私有 npm 仓库访问权限 | 需配置 .npmrc(见快速开始) |
下一步
- 快速上手 —— 5 分钟建好项目、跑起来
- 开发规范 —— 团队开发约定(命名 / 渲染策略 / SEO / SSR 安全)
- 框架配置 Module Options ——
swiftConfig能力总览 - Nuxt 渲染模式选用指南 —— 框架「ISR 为主力」性能初衷的展开