这是什么
在线代码 Playground 是一个跑在浏览器里的迷你编辑器 + 运行器:左边写代码,右边即时看结果。它不止"三个面板"——文件栏支持 HTML / CSS / JS / Vue / JSON / Markdown 六种类型,文件名可以带目录(如 src/components/App.vue),顶部有原生 / Vue 3 / Vue 项目三种模式;右侧是运行预览,底部还有一块 Console 面板收集输出与报错。
它适合这些场景:
- 练手:学新语法、试新 API,不用建项目文件
- 验证:调试一段正则、一个排序函数、一段 DOM 操作
- 演示:给同事讲思路前,先把 Demo 跑通
- 面试准备:手写题(防抖、深拷贝、Promise 并发限制)随手跑
- 拆组件:用 Vue 项目模式把 App.vue 与子组件分文件写,验证嵌套渲染与 scoped 样式
60 秒上手
页面打开就自带一个可运行的示例,改几个字符就能看到效果:
- 写代码:文件栏里点标签切换文件,编辑器带行号与语法高亮;点「+」可新建 HTML / CSS / JS / Vue / JSON / Markdown 文件,重命名时直接写 src/components/App.vue 这样的相对路径
- 换布局:文件栏最左侧的按钮在横向标签与竖向目录树之间切换,目录树按层级分组、可折叠,选择会记住,刷新后仍是上次的形态
- 看结果:默认开启"自动运行",停止输入约 0.6 秒后右侧自动刷新
- 手动运行:关闭自动运行开关后,点"运行"按钮或按 Ctrl+Enter
- 缩进:编辑器里按 Tab 键插入两个空格
工具栏还有四个按钮:「预览」可收起右侧预览区、让编辑器占满整行;「全屏」把整个工作区(代码区 + 预览 + Console)铺满屏幕,按 Esc 或再点一次退出(焦点落在预览 iframe 里时页面收不到按键,先点一下代码区或工具栏再按),注意预览区顶部的小图标只让预览独占全屏、两者不叠加;「下载」把当前代码导出成可直接双击打开的单文件 HTML(Vue 与 Vue 项目模式已内联运行时和全部模块,离线可用);「重置」一键恢复当前模式的内置示例(有确认弹窗)。
Console 面板与错误捕获
Console 面板接住沙箱里的所有输出,不用打开浏览器 DevTools:
- console.log / info / warn / error 全部捕获,按级别着色
- 对象与数组深度展开 3 层,循环引用标记为 [Circular],函数显示签名,DOM 元素显示成 div#app.box 形式的选择器
- 运行时错误(含语法错误)与未处理的 Promise 拒绝自动捕获,红色高亮
- 最多保留 200 条;每次运行自动清空;面板可折叠、可单独清空
Vue 3 模式
把顶部的模式开关切到 Vue 3,沙箱会自动注入 Vue 全局构建(vue.global.prod.js,v3.5),JS 面板里直接使用:
模板写在 HTML 文件的 #app 容器里,支持插值、指令、事件绑定;组合式 API 也可以:setup() { const n = Vue.ref(0); return { n }; }。
Vue 模式的内置示例是一个计数器:点击按钮、数据变化、视图更新,一条链路跑通,是练响应式 API 的最小环境。
Vue 项目模式:多组件真跑通
「Vue 项目」模式把文件栏变成一个真实的迷你工程,入口固定是 main.js(或 src/main.js),其余文件靠相对路径串起来:
三种常见写法的 .vue 都能真渲染:<script setup>(组合式)、选项式 <script> 配 <template>、以及只有 <template> 的纯展示组件;只有 <script> 而没有模板的按「自带 render 的组件」处理。既没写 template 也没写 script 的文件会被直接指出原因,不会静默渲染成一块空白。
每个 .vue 由 @vue/compiler-sfc 现场编译,<style scoped> 按文件路径生成稳定的 scopeId(形如 data-v-pg1a2b3c4d),所以嵌套组件的局部样式、响应式数据、事件绑定都是活的,不是静态字符串。全局 CSS(标了「全局」的文件)照常注入,.json / .md 文件可以放在工程里当数据或说明,只是不能被 import。
模块图只认两种说明符:'vue'(走 importmap 指向内联的运行时)与相对路径(./、../、/ 开头,可省略 .js / .vue 后缀)。注释掉的一行 import、字符串里出现的 import "x" 都只是文本,不会被当成依赖而拖住整个项目。
沙箱与隐私
预览运行在一个特殊的 iframe 沙箱里(sandbox="allow-scripts allow-modals allow-forms",刻意不带 allow-same-origin):
- 代码不上传:所有代码只在你的浏览器本地运行,服务器收不到
- 站点数据隔离:沙箱内是"不透明源",用户代码读不到主站的 Cookie、localStorage、indexedDB
- 草稿本地保存:代码以约 1 秒防抖自动存到浏览器 localStorage,关页面再开还在;换设备不会同步
因为源是隔离的,沙箱里发 fetch 请求同样受 CORS 约束,行为和真实页面一致——所以它也可以用来理解跨域。
使用技巧与边界
死循环恢复:如果写了 while(true){},页面会整体卡住(预览与主页面共用一个线程),刷新即可恢复,草稿不会丢。
文件栏跨模式共享:同一批文件在三种模式里都能看到,只是参与运行的方式不同——原生 / Vue 3 模式只拼 HTML / CSS / JS,.vue 与 import 关系要切到「Vue 项目」模式才生效。
定位与边界:它定位是"片段运行器",不是 IDE——大型工程、需要 npm 依赖、需要构建链的项目请回到本地编辑器;需要多人协作编辑的,适合用代码托管平台。
代码分享:想发给别人或留档,点工具栏"下载"导出单文件 HTML(Vue / Vue 项目模式会把运行时与全部模块一起打包进去,离线可直接打开);只是临时贴给同事,也可以直接把代码文字发过去,对方的页面会保留自己的草稿。
与 DevTools 配合:Console 面板看简明输出;要打断点、看网络面板,直接对整个页面开浏览器 DevTools,沙箱里的脚本同样可见。