{"id":24208817,"url":"https://github.com/alitajs/wufeng","last_synced_at":"2026-03-06T02:41:48.939Z","repository":{"id":44578833,"uuid":"395292093","full_name":"alitajs/wufeng","owner":"alitajs","description":"重剑无锋，大巧不工","archived":false,"fork":false,"pushed_at":"2022-04-20T09:07:41.000Z","size":4331,"stargazers_count":11,"open_issues_count":2,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-11T03:37:02.443Z","etag":null,"topics":["lowcode","nocode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alitajs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-12T11:14:31.000Z","updated_at":"2022-08-12T02:51:44.000Z","dependencies_parsed_at":"2022-08-20T05:10:43.122Z","dependency_job_id":null,"html_url":"https://github.com/alitajs/wufeng","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alitajs%2Fwufeng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alitajs%2Fwufeng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alitajs%2Fwufeng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alitajs%2Fwufeng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alitajs","download_url":"https://codeload.github.com/alitajs/wufeng/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233828260,"owners_count":18736602,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lowcode","nocode"],"created_at":"2025-01-14T01:18:40.108Z","updated_at":"2025-09-22T06:32:09.884Z","avatar_url":"https://github.com/alitajs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 无锋\n\n\u003e 重剑无锋，大巧不工\n\n“低代码”算是现在比较热门的一个课题，我们也尝试参与了公司内部的低代码平台搭建，觉得在近几年内这个课题应该都会比较热门。有个朋友问我，如果让你做一个低代码平台，你觉得都需要什么技术？\n我就在思考，以我现在掌握的技术栈能完成到什么程度？于是就想手写一个低代码平台，看看都需要什么技术。\n\n是的，这是一个没有规划的项目，从新建项目开始，慢慢挖坑，慢慢填坑。最终它可能是一个低代码平台，也可能是一个低代码技术栈的参考。\n\n## 工作流程\n\n1. yarn\n2. yarn build\n3. cd packages/wufeng \u0026\u0026 yarn run watch （如果有同时修改其他的库，也需要另起watch服务）\n4. yarn start:app\n\n## 主题\n\n延用 dumi 的方案，通过 `document.documentElement.setAttribute('data-prefers-color', 'dark');` 开启暗黑风格\n\n在样式中使用 `data-prefers-color='dark'` 判断是暗黑模式。\n\n如： packages/wufeng/src/EditorStyle/styles/box-model.less#L9\n\n```css\n    [data-prefers-color='dark'] \u0026 {\n      border: 1px solid @text-color-dark;\n    }\n```\n\n## 备注\n\n以下是我对一些包的构想，只是第一期个人脑爆的纪录。\n\n### 文档\n\n文档相关的依旧会使用 dumi，但是可能需要重写维护 dumi-theme-alita。因为会涉及到指定 demo 展示页面的问题，其中可能还有 vue 相关的官网展示。\n\n### 组件\n\nyinhu 组件使用 stencil 编写 web component 组件，后续可以直接发布成 React 和 vue 项目。因此这里可能需要一个 vue 版本的官网，响应上面的“文档”需求\n\nwufeng 组件，纯 React 的组件库，也是主要提供给其他地代码平台构建者的一个库。可能包含布局，和特定逻辑。\n\n### 数据\n\n数据的话，使用 dva ，把一些特定事件的响应逻辑保存到第三方包中，这里会涉及到 umi 项目中，如何手动注册 dva model，所以需要编写 `plugin-dva`,理想状态下是能支持组件级别的按需加载。\n\n### 表单\n\n主要是左侧的编辑表单，因为现在的移动端动态表单 dform 很好用，也用的很熟悉，所以期望在这里依旧使用 dform ，因此可能会强制规定这里用 iframe 打开一个移动端的表单，不过可能需要重写一个表单才行，毕竟会涉及到编辑类型\n\n### 图片资源\n\nicon，左侧的列表展示，感觉 ionic 的组件列表图片很好看，直接用 cdn 加载下来用如何\n\n### 测试\n\n测试的话，会使用 umi-test，utils 的话，会是 @alita/test，这个包是参考一些测试库整理的，在 dform 和 antd-mobile@5 中使用，表现都还行。\n\n### 拖拽\n\n打算用 react-dnd ，用过而且用法简单。\n\n### 用户系统\n\n展示不考虑编写后段，所以先使用 `leancloud-storage` 实现，应该足够满足现在的测试需求。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falitajs%2Fwufeng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falitajs%2Fwufeng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falitajs%2Fwufeng/lists"}