Skip to Content
UI 搭建代码组件组件开发

代码组件开发

基于 Zion 平台能力,通过编写 React 组件代码可扩展自定义组件,实现动态表单、数据驱动图表、复杂动画、交互式地图等多种业务场景。

查看 B 站教学视频

2025 年 9 月 8 日更新:CLI 版本更新至 v0.4.16 版本,同时废弃此版本之前所有版本。历史版本用户请重新安装,历史项目请使用“functorz update”命令进行升级。

前置条件

⚠️
  1. 熟练使用 Zion 平台进行无代码开发
  2. 具备编码能力,熟悉 TypeScript
  3. 了解 React 组件开发基础知识,能独立编写 React 组件代码

如需 React 入门,可参考:

快速开始

开始前请升级 CLI 工具至最新版本,并使用 functorz update 命令进行升级。 推荐使用 Node 18 或 20 版本,暂勿使用 Node 22。

1. 安装工具

安装全局命令行工具:

npm i -g functorz # 如遇网络缓慢可切换源并强制重装: npm i -g functorz --registry=https://registry.npmmirror.com --force

2. 查看帮助

安装后运行 functorz --help 查看全部命令及说明。

functorz help zvm cli 0.5.8 Usage: functorz [options] [command] Options: -h, --help display help for command Commands: signin [options] <用户名/邮箱> <密码> 登录到Zion平台 create [options] <项目名> 初始化项目 publish [options] 发布项目 ...

常用命令

  • create <项目名>:初始化项目
  • signin <用户名/邮箱> <密码>:登录 Zion 平台
  • signout:登出
  • update:更新项目到最新的模板结构
  • publish:发布项目
  • reinit:重新注册项目 ID,将本地项目重新发布到平台
  • reset:重置模板项目
  • delete:删除项目
  • unpublish <版本号>:取消发布指定版本
  • dryrun:检查项目是否可以发布
  • help:查看帮助

通用开发流程

登录平台

在自己的工作目录下运行如下命令。

> functorz signin 你的邮箱账号 你的密码

创建项目

在任意目录运行以下命令:

# create 项目名 > functorz create test

该命令会创建一个新的文件夹 test,它包含所有工程文件和模板组件。同时会在平台上注册一个代码组件项目。

编辑代码

进入项目目录并安装依赖:

> cd test > npm install

如需使用 AI 协同开发,请阅读:使用 Cursor 辅助开发 Zion 代码组件

阅读项目模板结构

一个典型的代码组件库项目的基本结构如下所示。

      • index.ts
    • App.scss
    • App.tsx
    • index.css
    • main.tsx
    • vite-env.d.ts
  • .eslintrc.cjs
  • .gitignore
  • codegen.ts
  • HELPER.md
  • index.html
  • package.json
  • README.md
  • tsconfig.json
  • tsconfig.node.json
  • vite.config.ts

其中:

  • src/components 是声明和编辑代码组件的主要目录。
  • resources 是资源文件目录,用于存放图标和预览图。
  • README.md 是项目说明文件,用于存放项目说明。

遵守强制规范

每个自定义组件必须符合下述规则:

  1. 目录结构规范

    • 组件必须有一个目录在 src/components
    • 目录名称必须为组件名(大写字母开头)
    • 目录下必须至少包含 index.ts组件名.tsx
  2. 类型声明规范 src/components/组件名/组件名.tsx 下必须 export 以下 4 个 interface:

    接口名称用途类型要求
    ${组件名}PropData外部传入数据string, number, boolean 及其数组
    ${组件名}StateData暴露给外部的状态State<string | number | boolean> 或其数组
    ${组件名}Event触发外部事件EventHandler
    ${组件名}Props组件 Props包含 propData, propState, event

    代码示例:

    import { EventHandler } from 'zvm-code-context'; export interface ConfirmModalPropData { buttonTitle: string; } export interface ConfirmModalStateData {} export interface ConfirmModalEvent { onConfirm?: EventHandler; } export interface ConfirmModalProps { propData: ConfirmModalPropData; propState: ConfirmModalStateData; event: ConfirmModalEvent; } export function ConfirmModal({ propData, event }: ConfirmModalProps) { // ... 业务逻辑 }

与宿主项目交互(可选)

请阅读:代码组件 API 参考

导出组件

src/components/index.ts 中暴露新编辑的组件。

修改项目基础信息(项目和组件元数据)

  1. package.json:修改 name, description, version (遵循 npm 规范)。
  2. resources 目录:添加图标和预览图 (webp/svg)。
    • /resources/icon.webp (24x24)
    • /resources/组件名/icon.webp (72x54)
    • /resources/组件名/canvas.webp (300x200)
  3. README.md:修改项目和组件说明。
    • /README.md:项目说明。
    • /src/components/组件名/README.md:组件说明。

本地调试

方式一:直接 Preview

npm run preview # 本地启动一个静态资源服务器,可以为构建产物支持 http 访问。默认启动 6326 端口。

方式二:结合 Zion 实时预览

  1. 确保项目历史已发布过。
  2. 运行以下命令:
npm run preview # 本地启动一个静态资源服务器,可以为构建产物支持 http 访问。默认启动 6326 端口。 npm run watch:build # 监听本地源代码变化,当编辑保存后,自动运行 npm run build 命令。
  1. 在 Zion 编辑器中打开实时预览,点击“调试”图标,选择端口 6326。
  2. 代码变更后,刷新实时预览即可看到最新效果。

发布项目

在根目录运行以下命令:

functorz publish

如果发布失败,可以运行 functorz publish --verbose,以获得更详细的信息,问 AI 或者在社区或者用户群提报错误。

在 Zion 中使用

  1. 导入:点击添加组件,选择“导入”,点击“导入组件库”即可。
  2. 同步:代码变更后需同步或重新发布。
  3. 使用:拖拽组件到画布,配置右侧属性面板(数据绑定、事件)。

微信小程序开发说明

前置条件

  • 安装最新版全局命令行工具
  • 小程序端与网页端代码组件库分离
  • 小程序有主包/分包大小不超过 2MB 的限制,注意代码组件库的大小

开发说明

  1. 直接使用 HTML 组件
// 在小程序编译产物中,这段会变成 <view>Hello world</view> <div>Hello world</div>
  1. 直接使用 wx
// 1.在 src/typings/global.d.ts 中加入 declare const wx: any;
// 2.使用 wx.createSelectorQuery().select('#xxx').boundingClientRect((rect: any) => { // console.log(rect) }).exec();
  1. 使用 @tarojs/taro 和 @tarojs/components
npm i @tarojs/taro@4.0.9 @tarojs/components@4.0.9
// 在 vite.config.ts 的 shared 中加入 @tarojs/taro 和 @tarojs/components export default defineConfig({ plugins: [ ... federation({ ... shared: [..., "@tarojs/taro", "@tarojs/components"], }), ], ... }); // 使用 import Taro from '@tarojs/taro'; import { ScrollView } from '@tarojs/components'; Taro.createSelectorQuery() .select("#xxx") .boundingClientRect((rect: any) => { // console.log(rect) }) .exec(); return <ScrollView>xxxx</ScrollView>
  1. 使用 taro-ui
npm i taro-ui # 如遇依赖冲突可用: npm i taro-ui --legacy-peer-deps
import { AtCalendar } from 'taro-ui'; import 'taro-ui/dist/style/components/calendar.scss'; export interface CalendarPropData {} export interface CalendarEvent {} export interface CalendarStateData {} export interface CalendarProps { event: CalendarEvent; propData: CalendarPropData; propState: CalendarStateData; } export function Calendar({}: CalendarProps) { return <AtCalendar />; }

注意事项:

  • 如果使用了 @tarojs/taro 和 @tarojs/components 一定要加到 vite.config.shared 中
  • 小程序端 vite.config.shared 目前仅支持 react, react-dom, classname, constate, lodash, dayjs, @tarojs/taro, @tarojs/components, zvm-code-context 实时预览不支持 Taro 相关的依赖,如果有使用,请生成小程序后查看

调试说明

如果代码组件逻辑相对比较复杂,需要本地调试

  • 下载微信开发者工具
  • 根据 Taro 文档初始化一个空白项目
  • 在 Taro 项目中开发代码组件,在微信开发者工具中调试

参考文档

Last updated on