浏览器

web-development

为 React、Vue、Vite 前端工程提供 TypeScript 严格校验与浏览器实测兜底。

它能做什么

用于 React、Vue、Vite 的 Web 前端实现与联调、构建、部署和验证。强制 TypeScript 严格模式:禁止 any,要求 tsc、eslint、构建命令和相关单元测试全部通过,并对涉及页面、路由、表单、鉴权或异步流程的改动用 agent-browser 走真实浏览器回归,需要记录实际检查结果。需要 CloudBase 平台能力时,可接入 Web SDK 与静态托管;任何样式与布局工作开始前必须先加载 ui-design 技能并产出设计规约。

什么时候用它

  • 实现 React 或 Vue 页面与组件
  • 搭建 Vite 前端工程脚手架
  • 在浏览器中对路由或表单改动做回归验证
  • 接入 CloudBase Web SDK 与静态托管

技能文档

Sibling skills (local only)

Sibling CloudBase skills ship beside this skill. Use local relative paths such as ../auth-tool-cloudbase/SKILL.md.

If a referenced sibling skill file is missing from this environment, ask the user to install the full CloudBase plugin (or the missing skill). Do not HTTP-fetch remote skill or protocol markdown into the agent context.

Cross-cutting protocols (required before code changes or deployments):

  • Change Safety Protocol: ../cloudbase-platform/references/protocols/change-safety-protocol.md
  • Deployment Gate: ../cloudbase-platform/references/protocols/deployment-gate.md

Web Development

Activation Contract

Use this first when

  • The request is to implement, integrate, debug, build, deploy, or validate a Web frontend or static site.
  • The design direction is already decided, or the user is asking for engineering execution rather than visual exploration.
  • The work involves React, Vue, Vite, routing, browser-based verification, or CloudBase Web integration.

Read before writing code if

  • The task includes project structure, framework conventions, build config, deployment, routing, or frontend test and validation flows.
  • The request includes UI implementation but the visual direction is already fixed; otherwise read ui-design first.
  • ⚠️ Any task involving interface styling, layout, color scheme, or font selection — before writing the first line of CSS/Tailwind, you MUST load the ui-design skill and output a Design Specification. Skipping this step causes frontend styling to degrade to generic AI template defaults. The ui-design skill must be loaded before any visual implementation begins, not retroactively after the user complains about the appearance.

Then also read

  • General React / Vue / Vite guidance -> frameworks.md
  • Browser flow checks or page validation -> browser-testing.md
  • Login flow -> ../auth-tool-cloudbase/SKILL.md, then ../auth-web-cloudbase/SKILL.md
  • Official Account JSAPI Pay, Native QR-code Pay, or WeChat OAuth on CloudBase -> ../cloudbase-wechat-integration/SKILL.md (official docs: https://docs.cloudbase.net/integration/introduce/index.md)
  • CloudBase database work -> matching database skill

Do NOT use for

  • Visual direction setting, prototype-first design work, or pure aesthetic exploration.
  • Mini programs, native Apps, or backend-only services.
  • WeChat payment or Official Account OAuth contract details; use cloudbase-wechat-integration after identifying the Web surface.

Common mistakes / gotchas

  • Starting implementation before clarifying whether the task is design or engineering execution.
  • Mixing framework setup, deployment, and CloudBase integration concerns into one vague change.
  • Treating cloud functions as the default solution for Web authentication.
  • Skipping browser-level validation after a UI or routing change.
  • History mode SPA with CloudBase static hosting: deploying a single-page app using History mode (React Router / Vue Router) without configuring the static hosting "404 error document" to index.html. This causes NoSuchKey / 404 errors when users refresh or directly visit any sub-route.
  • In an existing application, detouring into UI redesign or broad repo sweeps before patching the current handlers and services.

Engineering constitution (non-negotiable)

These rules override convenience. Treat them as a gate before saying "done".

1. TypeScript — do not silence the type system

  • Do NOT use any to bypass type errors. Not : any, not as any, not @ts-ignore, not @ts-nocheck, not @ts-expect-error without a written justification. any propagates silently and defeats the only compile-time safety net this project has.
  • When a type error appears, fix the root cause:
    • Missing / wrong library types → install @types/..., or narrow the import, or write a precise interface / type for the shape you actually use.
    • Shape is genuinely unknown at the boundary (JSON from an API, postMessage payload, window.* injection) → type it as unknown and narrow with a type guard (typeof, in, a discriminator field, or zod / equivalent).
    • Third-party type is wrong → augment via declare module in a local .d.ts, not any.
    • Truly dynamic case (e.g. generic event bus) → use a generic `` with a constraint, not any.
  • unknown + narrowing is the acceptable escape hatch. any is not.
  • If you genuinely cannot avoid any for a specific line (extremely rare), leave a one-line comment with why and what would remove it, so reviewers can audit.
  • The same spirit applies to ESLint: do not sprinkle // eslint-disable to mute the real signal. Fix the rule violation, or discuss before disabling.

2. Self-verify before claiming done

Before making any non-trivial code or configuration change, you must first follow the Change Safety Protocol in cloudbase-platform/references/protocols/change-safety-protocol.md (declare impact → user confirmation → post-edit verification). Before any static hosting publish or custom domain work, complete the checks in cloudbase-platform/references/protocols/deployment-gate.md.

Saying "I've implemented it" / "fixed it" / "it should work" without evidence is not acceptable. Before declaring completion, you must actually run the checks and report the result.

Static / build layer (always, when applicable):

  • tsc --noEmit (or vue-tsc --noEmit) passes cleanly — zero errors, zero suppressed diagnostics you added.
  • eslint / project linter passes on changed files.
  • The project's build command (npm run build / pnpm build / vite build) completes without new warnings that you introduced.
  • The project's unit tests pass if they exist and cover the touched area.

Runtime / browser layer (whenever the change affects rendering, routing, forms, auth, or async flows):

  • Use the agent-browser tool to actually open the page and reproduce the user-visible flow. Follow browser-testing.md for the concrete workflow.
  • Confirm: the target route loads, the interaction you claim to have fixed behaves the way you claim, no new console errors are introduced, and no regression in the adjacent routes you touched.
  • Record what you checked (route, action, expected result, actual result).

Only after both layers pass may you say the task is done. If either layer cannot be executed locally (e.g. blocked by credentials, missing backend, paid API), say so explicitly and list exactly which step is still unverified — do not gloss over it.

3. Do not paper over failures

  • Do not wrap broken logic in try { ... } catch {} to make the error go away.
  • Do not delete or skip a failing test to make CI green — fix it, or explain why the test is actually wrong and change the test with justification.
  • Do not mark a task complete because "the code compiles". Compilation is the bare minimum, not the goal.

When to use this skill

Use this skill for Web engineering work such as:

  • Implementing React or Vue pages and components
  • Setting up or maintaining Vite-based frontend projects
  • Handling routing, data loading, forms, and build configuration
  • Running browser-based validation and smoke checks
  • Integrating CloudBase Web SDK and static hosting when the project needs CloudBase capabilities

Do NOT use for:

  • UI direction or visual system design only; use ui-design
  • Mini program development; use miniprogram-development
  • Backend service implementation; use cloudrun-development or cloud-functions

How to use this skill (for a coding agent)

  1. Clarify the execution surface

    • Confirm whether the task is framework setup, page implementation, debugging, deployment, validation, or CloudBase integration.
    • Keep the work scoped to the actual Web app surface instead of spreading into unrelated backend changes.
    • If the workspace is an existing application with TODOs, treat it as a targeted repair task, not a greenfield build.
  2. Follow framework and build conventions

    • Prefer the existing project stack if one already exists.
    • For new work, treat Vite as the default bundler unless the repo or user constraints say otherwise.
    • Put reusable app code under src and build output under dist unless the repo already uses a different convention.
    • In an existing application with fixed structure, inspect the files that already own the flow before reading broad docs: src/lib/backend.*, src/lib/auth.*, src/lib/*service.*, route guards, and the page handlers bound to submit buttons.
  3. Validate through the browser, not only by reading code

    • For interaction, routing, rendering, or regression checks, use agent-browser workflows from browser-testing.md.
    • Prefer lightweight smoke validation for changed flows before claiming the frontend work is complete.
  4. Treat CloudBase as an integration branch

    • Use CloudBase Web SDK and static hosting guidance only when the project actually needs CloudBase platform features.
    • Reuse auth-tool-cloudbase and auth-web-cloudbase for login or provider readiness instead of re-describing those flows here.

Core workflow

1. Choose the right engineering path

  • React / Vue feature work: implement within the app's existing component, routing, and state conventions
  • New Web app: prefer Vite unless the repo already standardizes on another toolchain
  • Debugging and regressions: reproduce in browser, narrow to a specific page or interaction, then patch
  • CloudBase integration: wire in Web SDK, auth, data, or static hosting only after the base frontend path is clear

2. Keep implementation grounded in project reality

  • Follow the repo's package manager, scripts, and lint/test patterns
  • Avoid framework rewrites unless the user explicitly asks for one
  • Prefer the smallest viable page/component/config change that satisfies the task
  • In TODO-based apps, complete the existing implementation directly instead of creating parallel helpers, sample pages, or detached prototypes

3. Validate changed flows explicitly

  • Run the relevant local build / lint / typecheck / test command when available. A clean tsc --noEmit and a clean project build are the minimum bar — not proof of correctness.
  • For anything user-visible (routing, forms, rendering, auth, async flows), open the affected page or flow in a browser with agent-browser. Code reading alone is not sufficient evidence — see the Engineering constitution above.
  • Record what was checked: route, action, expected result, actual result, and any remaining gap.

CloudBase Web integration

Use this section only when the Web project needs CloudBase platform features.

Web SDK rules

  • Prefer npm installation for React, Vue, Vite, and other bundler-based projects: npm install @cloudbase/js-sdk
  • Use the CDN only for static HTML pages, quick demos, embedded snippets, or README examples: https://static.cloudbase.net/cloudbase-js-sdk/latest/cloudbase.full.js
  • Only use documented CloudBase Web SDK APIs; do not invent methods or options
  • Keep a shared app or auth instance instead of re-initializing on every call
  • If the user only provides an environment alias, nickname, or other shorthand, resolve it to the canonical full EnvId before writing SDK init code, console links, or config files. Do not pass alias-like short forms directly into cloudbase.init({ env }).

Authentication boundary

  • Authentication must use CloudBase SDK built-in features
  • Do not move Web login logic into cloud functions
  • For provider readiness, login method setup, or publishable key issues, route to auth-tool-cloudbase and auth-web-cloudbase

Static hosting defaults

  • Build before deployment

  • Prefer relative asset paths for static hosting compatibility

  • Use hash routing by default when the project lacks server-side route rewrites

  • If the user does not specify a root path, avoid deploying directly to the site root by default

  • SPA routing (History mode): when using React Router / Vue Router in History mode (not hash mode), configure the CloudBase static hosting "404 error document" to index.html. Otherwise refreshing or directly visiting any sub-route returns NoSuchKey / 404 error, because the static hosting looks for a file at that path instead of falling through to index.html for the SPA to handle routing.

    Use the MCP tool to apply this:

    manageHosting({ action: "setWebsiteDocument", indexDocument: "index.html", errorDocument: "index.html" })
    

    Then verify with:

    queryHosting({ action: "websiteConfig" })
    

CloudBase quick start

// npm install @cloudbase/js-sdk
import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
  env: "your-full-env-id", // Canonical full CloudBase environment ID resolved from envQuery or the console
});

const auth = app.auth

常见问题

什么时候必须先加载 ui-design 技能?
任何样式、布局、配色或字体相关工作,写第一行 CSS 或 Tailwind 之前都必须先加载 ui-design 并输出设计规约,否则前端样式容易退化为通用 AI 模板默认风格。
可以用 any 绕过 TypeScript 报错吗?
不可以。规则明确禁止 any、as any、@ts-ignore、@ts-nocheck 以及未经说明的 @ts-expect-error;边界数据应使用 unknown 加类型守卫,或直接修复类型根因。
怎样才算真正完成?
需要 tsc 或 vue-tsc、项目构建命令、改动文件的 eslint 全部通过,再在 agent-browser 中打开受影响页面,记录路由、操作、预期与实际结果;如果某一步因环境受限无法执行,也要明确说明未验证的部分。

相关技能

在动手前把 CloudBase 任务路由到正确的子技能,并守住"先准备再实现再 review"的工程流程。

124 次安装

Use when users need visual direction, interface hierarchy, layout decisions, design specifications, or prototypes before implementing a Web or mini program UI.

61 次安装

针对 Vue 3 响应式、组件、路由和性能问题,依据控制台报错与代码形态给出具体修复方案。

121 次安装8 星标

按规则构建、调试和审查 React 应用,覆盖组件、状态、表单、性能与 React 19 特性。

245 次安装3 星标

通过 curl 调用 JSON-RPC API 发布 Web 应用,并获得一个公开访问的网址。

152 次安装8 星标

Build polished, conversion-aware frontends with strong visual taste, clear hierarchy, and production-grade HTML/CSS/JS. Landing pages, dashboards, components...

59 次安装2 星标