Skip to content
nice-LylesPublic

About

中文图形化 Web 编程平台:像搭积木一样写网页,生成干净的 HTML / CSS / JavaScript / PHP / SQL。967 块中文积木,实时预览,一键打包成能直接部署的真实项目。零依赖(PHP 8 + 原生 JS,无 Node、无构建)。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

18 Commits

Folders and files

Repository files navigation

Gra · 图形化 Web 编程平台

像搭积木一样写网页:左边拖中文积木,右边实时预览,做完一键打包成真实项目下载。

积木不是玩具 —— 它生成的是干净的 HTML / CSS / JavaScript / PHP / SQL / Python,可以直接部署。

License: MIT PHP 依赖 测试 中文

Gra 编辑器界面


这是什么

一个装在自己电脑上的图形化 Web 编程平台,面向零基础用户,也面向想快速搭原型的人。

  • 想学做网页的人:不用先背标签和语法,拖「标题 / 卡片 / 横向排列 / 鼠标悬停」,右边立刻看到效果;
  • 会写代码的人:它是代码优先的 —— 每个文件都能切到代码视图手写,改完再「转成积木」接着拖,认不出的部分原样保留,代码一行不丢;
  • 要交付的人:点「下载」拿到的是真实目录结构的 ZIP,php -S 就能跑,也能直接丢到虚拟主机或服务器上。

平台本身零依赖:只要有 PHP 8,双击脚本就能用,不需要 Node、不需要构建、不需要数据库(没装 MySQL 会自动用项目内的 SQLite 跑通后端示例)。


快速开始

git clone https://github.com/<你的账号>/Gra.git
cd Gra/visual-editor
./start.sh

浏览器打开 http://127.0.0.1:8080 即可。默认只监听本机,不进公网。

命令 作用
./start.sh 启动,默认 127.0.0.1:8080
./start.sh --port 9000 换端口
./start.sh --open 启动后自动打开浏览器
./start.sh --lan 允许局域网访问(见下方「安全边界」,只在可信网络用)
./start.sh --check 只做环境体检,不启动
PHP_BIN=/path/to/php8 ./start.sh 本机有多个 PHP 时指定解释器

注意仓库根目录不是项目目录,平台在 visual-editor/ 子目录里。

打开后顶栏的 模板 里有三个能直接跑的样板:品牌官网(纯前端)、留言板(前端 + PHP + MySQL,连不上 MySQL 会自动改用 SQLite)、Python 动态页面。


亮点

967 块中文积木,每一块都有说明书

覆盖 HTML 语义标签、CSS 属性(329 块)、JS 语言与 DOM/BOM、PHP 后端、SQL,外加「常用库」一键引入 Bootstrap / jQuery / Chart.js。967 块积木的用途、1794 个参数怎么填,全部有中文解释和能照抄的例子 —— 鼠标停在参数上就有提示,空输入框里就是示例值。这不是维护出来的文档,而是从积木定义本身生成的,所以加一行积木就有配套说明。

一个文件装下前端三件套

编辑 .html 时,积木箱里 HTML + CSS + JS 一起列出来:样式积木自动收进 <style>、交互动积木自动收进 <script>,不必先建 css / js 文件。每块积木右侧有 HTML / CSS / JS 语言徽章,一眼看出它写的是什么。

把样式积木拖到积木身上

想让某段文字变红,不用建样式文件、不用想选择器 —— 直接把「文字颜色」积木拖到那块积木身上(悬停时会出现虚线的「样式区」):

  • 声明类样式 → 合并进这个元素的 style="",不影响别的积木;
  • 「鼠标悬停时」「手机屏幕上」这类不能内联的 → 自动生成只属于它的类名(如 .gra-style-0iy3a0dl);
  • 反向也成立:代码 → 积木时样式会还原成样式积木并保持类名不变,所以「积木 → 代码 → 积木 → 代码」两遍结果一模一样(有测试盯着)。

时间线:真实 git,像 VSCode 的 Timeline

每个项目第一次保存时自动建本地 git 仓库,之后每次保存自动提交一次。按「今天 / 昨天 / 日期」分组看改了什么、增删几行,点一条看完整差异,随时回到从前。仓库就在项目目录里(projects/<项目>/.git),可以用 VSCode 或任何 git 工具接手 —— 只在本机提交,不设远端、不推送。

完整启动:把整个项目真跑起来

预览工具条上有「启动文件」和「方式」:

  • 单文件预览:静态网页实时刷新;
  • 完整启动:在 6565 端口把整个项目后台跑起来 —— 有 package.json 就执行它的 dev/start 脚本(Astro / Vite / Next 会自动补 --port 6565),有 PHP 就用 php -S 服务整个目录,启动文件是 .py 就跑它。预览 iframe 直接连 http://127.0.0.1:6565/,相对路径、接口调用、热更新全是真的。

启动文件自己选(任何文件都能当),缺依赖会提示并给「装依赖」按钮,端口被占用会告诉你谁占的。

上传现成源码,当积木改

文件 / 文件夹 / ZIP / 直接粘贴都能导入,自动还原成积木,认不出的部分保留为「原样片段」,注释也保留成注释积木。永远不会丢代码 —— 这一点有往返测试保证。

顺带还给客户的 AI 备了饭

仓库自带 llms.txt + docs/agent-faq.json(67 条带步骤的结构化问答)+ docs/客户文档.md。把地址丢给客户的 AI,它就能自助答疑,不用你一遍遍复述。


生成的是什么代码

拖几块积木,生成的就是一个能直接部署的普通项目,没有任何运行时或框架锁定。示意:

我的官网/
├── index.html          ← HTML 积木生成的结构
├── css/style.css       ← CSS 积木(或内联在 <style> 里)
├── js/script.js        ← JS 积木(或内联在 <script> 里)
├── api/list.php        ← PHP 积木生成的后端接口
├── config/db.php       ← 「数据库设置」一键生成(默认自动选 MySQL / SQLite)
└── sql/schema.sql      ← SQL 积木生成的建表语句

下载 ZIP 后在目录里 php -S 127.0.0.1:8000,浏览器打开 http://127.0.0.1:8000 就能跑。


仓库结构

Gra/
├── visual-editor/            平台本体(PHP + 原生 JS,无构建)
│   ├── index.html            编辑器界面
│   ├── start.sh              启动脚本(环境体检 / 版本检查 / 端口检查)
│   ├── router.php            开发服务器路由(MIME、PHP 执行、安全拦截)
│   ├── api/                  后端接口(项目 / 数据库 / 版本历史 / 时间线 / 运行 / 完整启动 / 上传)
│   ├── assets/js/            积木表、生成器、反解析器、编辑器各模块
│   ├── docs/                 面向客户的文档 + AI agent 资料
│   ├── projects/             用户项目落盘处(不入版本库)
│   ├── tests/                7 套测试
│   └── README.md             完整说明书(功能、积木体系、安全边界、FAQ)
├── .github/workflows/ci.yml  CI:真起服务、真跑全套测试
└── CHANGELOG.md

完整文档请看 visual-editor/README.md —— 那里有积木体系、目录结构逐文件说明、安全边界和常见问题。


测试

cd visual-editor
./start.sh                 # 另开一个终端让服务跑着,端到端测试才会执行
./tests/run.sh             # 生成器 / 反解析 / 零基础说明书 / 时间线 / 界面冒烟(+ e2e / 完整启动)

7 套测试、540 项断言,全部是「真跑一遍」而不是打桩:

测试 断言 测什么
test_generator.mjs 60 多文件多语言生成、967 块积木逐个渲染、嵌套缩进、转义
test_parser.mjs 60 代码 → 积木往返一致、注释保留、原样兜底
test_help.mjs 17 每块积木都有说明、每个参数都有解释和例子
test_git.mjs 33 时间线用真实 git 跑:提交 / 差异 / 回到从前 / 越权保护
test_ui.mjs 209 jsdom 里真跑前端:拖拽、样式插块、撤销重做、模板、自动保存
test_e2e.mjs 108 静态资源、源码泄露检查、保存落盘、SQLite 建表、PHP / Python 真跑、ZIP 打包
test_serve.mjs 53 真的在 6565 起进程、抓页面、验停止、验依赖缺失与端口占用

界面冒烟测试需要 jsdom(只在测试时需要,平台本身零依赖):

mkdir -p /tmp/gra-domtest && cd /tmp/gra-domtest && npm i jsdom

CI 会真起服务、真占端口跑完整套,并断言没有哪一项被静默跳过。


安全边界

这是本机开发工具,不是可以放上公网的多用户服务 —— 请不要部署成在线 SaaS。设计上已经做到的:

  • 默认只绑定 127.0.0.1;
  • 只有 api/ 与 projects/ 下的 .php 会被执行,其余位置的 PHP 一律 403,绝不返回源码;
  • Python 只执行项目目录下的 .py,只允许本机请求、强制超时;
  • 运行 / 上传接口只接受本机请求,路径统一规范化并拒绝 ..,ZIP 采用「读出来再写」天然免疫 zip-slip;
  • 数据库口令随请求传递、用完即弃、不落盘。

--lan 会把「项目里的 PHP / Python 会被执行」一起暴露给同网段,只在可信网络里用。完整清单见 visual-editor/README.md 的「安全边界」一节。


常见问题

预览一片空白? 静态项目编辑即刷新;带后端的项目要点「运行」。状态栏会写清楚当前是哪种模式以及失败原因。

起不来? 先跑 ./start.sh --check:它会检查 PHP 版本(需要 8.0+)、扩展、端口占用。

需要装 Node 吗? 不需要,平台零依赖。只有 Astro / Vite 这类 Node 项目用「完整启动」时才需要 Node。

能把项目推到 GitHub 吗? 平台内置的时间线刻意不做远端推送(安全边界)。需要上传就用「下载」拿 ZIP,或自己在终端里给项目目录加远端再推。

更多问题(样式贴不上、Python 没反应、上传过大、数据库连不上、时间线与「版本」的区别……)见 visual-editor/README.md#十常见问题。


鸣谢

项目鸣谢:大肥鱼


许可证

MIT —— 可自由使用、修改、分发、商用,只需保留版权声明。


English

Gra is a local-first, zero-dependency visual web programming platform with a fully Chinese UI. Drag blocks on the left, see a live preview on the right, and export a real, deployable project — clean HTML / CSS / JavaScript / PHP / SQL / Python, no runtime and no lock-in. It requires nothing but PHP 8.0+, ships with 967 blocks (every block and every parameter documented in plain Chinese), a real-git timeline per project, and a one-click "run the whole project" mode. The documentation in this repository is in Chinese.

About

中文图形化 Web 编程平台:像搭积木一样写网页,生成干净的 HTML / CSS / JavaScript / PHP / SQL。967 块中文积木,实时预览,一键打包成能直接部署的真实项目。零依赖(PHP 8 + 原生 JS,无 Node、无构建)。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages