关于 implement-hotwire
implement-hotwire 是用于构建 Rails 前端的技能,强调渐进增强。它指导开发者先实现纯 HTML,再按需加入 Turbo 和 Stimulus,并验证无 JavaScript 时的行为。
主要功能
- 01以 HTML 为先的渐进增强
- 02Turbo Frame 与 Stream 选择
- 03Stimulus 分层指导
- 04禁用 JavaScript 后验证
- 05说明 DOM 与服务器契约
适用场景
- 01构建 Rails 页面局部更新
- 02添加服务器广播的界面变化
- 03实现 Turbo 之外的客户端行为
- 04验证无 JavaScript 时的表单与导航
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill implement-hotwire安装后在 Claude Code 中输入/implement-hotwire确认已加载。
附带文件EXAMPLES.mdreferences/workflow.md
详细介绍
实现 Hotwire
使用渐进增强,通过 Hotwire 构建现代 Rails 前端。
快速参考
| 需求 | Hotwire 选择 |
|---|---|
| 在链接/表单后替换页面的某一部分 | Turbo Frame |
| 广播服务端变更 | Turbo Stream |
| 超出 Turbo 范围的仅客户端行为 | Stimulus controller |
| 整页导航 | 普通 Rails 导航,而非 frame |
HARD-GATE
ALWAYS start with HTML-only, enhance with Hotwire progressively
NEVER use Turbo Frames for full page navigation
ALWAYS test without JavaScript first
核心流程
- 构建纯 HTML — 使用标准 Rails 表单和链接实现功能,不使用 Hotwire。
- 识别更新区域 — 将局部更新区域包裹在
turbo_frame_tag中。验证:确认<turbo-frame>以正确的id出现在 DOM 中。 - 添加 Turbo Frames / Streams — 限定 frame 导航范围,或通过 ActionCable 广播。验证:在 DevTools 的 Network 标签页中确认 frame 请求返回
text/vnd.turbo-stream.html;对于 ActionCable,验证订阅出现在 Action Cable 日志中。 - 叠加 Stimulus — 仅在 Turbo 之外需要 JavaScript 行为的地方附加 controller。验证:在浏览器控制台中确认
application.getControllerForElementAndIdentifier(el, 'name')返回 controller 实例。 - 验证降级模式 — 在浏览器 DevTools 中禁用 JavaScript(或使用 Capybara 的
:rack_test驱动运行rails test:system),并确认在无 JS 情况下一切保持正常:表单提交、链接导航、重新加载后数据持久化。
代码示例
Turbo Frame
<%= turbo_frame_tag "post_#{@post.id}" do %>
<h1><%= @post.title %></h1>
<%= link_to "Edit", edit_post_path(@post) %>
<% end %>
Turbo Stream
<%= turbo_stream.append "posts", partial: "post", locals: { post: @post } %>
Stimulus Controller
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["name"]
greet() { alert(`Hello ${this.nameTarget.value}!`) }
}
在 app/javascript/controllers/index.js 中注册:
import GreetController from "./greet_controller"
application.register("greet", GreetController)
输出风格
实现 Hotwire 时,你的输出必须包括:
- 渐进式基线 — 在增强之前,功能如何以纯 HTML 工作。
- 所选原语 — Turbo Frame、Turbo Stream、Stimulus 或其组合,以及原因。
- DOM 契约 — frame ID、stream 目标、Stimulus controller 名称、目标、值和动作。
- 服务端契约 — controller 响应格式、广播触发条件、partial 名称,以及使用时的 ActionCable channel/日志检查。
- 验证 — 来自核心流程第 5 步的降级模式检查清单,加上针对 frame、stream 或 Stimulus 行为的系统/浏览器检查。
- 语言 — 除非明确要求其他语言,否则使用英语。
扩展资源(渐进式披露)
仅在需要其特定内容时加载这些文件:
- EXAMPLES.md — 当你需要 Turbo Frames、Streams 和 Stimulus 模式的完整示例时使用
- references/workflow.md — 当你需要逐步的 Hotwire 实现工作流和决策树时使用
集成
| 技能 | 何时链接 |
|---|---|
| write-tests | 用于系统规格和失败的交互覆盖 |
| apply-stack-conventions | 用于 Rails + Hotwire + Tailwind 技术栈对齐 |
| code-review | 在 UI 行为和降级模式验证之后 |
评论
支持 Markdown