代码组件开发
基于 Zion 平台能力,通过编写 React 组件代码可扩展自定义组件,实现动态表单、数据驱动图表、复杂动画、交互式地图等多种业务场景。
2025 年 9 月 8 日更新:CLI 版本更新至 v0.4.16 版本,同时废弃此版本之前所有版本。历史版本用户请重新安装,历史项目请使用“functorz update”命令进行升级。
前置条件
⚠️
- 熟练使用 Zion 平台进行无代码开发
- 具备编码能力,熟悉 TypeScript
- 了解 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 --force2. 查看帮助
安装后运行 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是项目说明文件,用于存放项目说明。
遵守强制规范
每个自定义组件必须符合下述规则:
-
目录结构规范
- 组件必须有一个目录在
src/components下 - 目录名称必须为组件名(大写字母开头)
- 目录下必须至少包含
index.ts和组件名.tsx
- 组件必须有一个目录在
-
类型声明规范
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 中暴露新编辑的组件。
修改项目基础信息(项目和组件元数据)
- package.json:修改
name,description,version(遵循 npm 规范)。 - resources 目录:添加图标和预览图 (webp/svg)。
/resources/icon.webp(24x24)/resources/组件名/icon.webp(72x54)/resources/组件名/canvas.webp(300x200)
- README.md:修改项目和组件说明。
/README.md:项目说明。/src/components/组件名/README.md:组件说明。
本地调试
方式一:直接 Preview
npm run preview # 本地启动一个静态资源服务器,可以为构建产物支持 http 访问。默认启动 6326 端口。方式二:结合 Zion 实时预览
- 确保项目历史已发布过。
- 运行以下命令:
npm run preview # 本地启动一个静态资源服务器,可以为构建产物支持 http 访问。默认启动 6326 端口。
npm run watch:build # 监听本地源代码变化,当编辑保存后,自动运行 npm run build 命令。- 在 Zion 编辑器中打开实时预览,点击“调试”图标,选择端口 6326。
- 代码变更后,刷新实时预览即可看到最新效果。
发布项目
在根目录运行以下命令:
functorz publish如果发布失败,可以运行 functorz publish --verbose,以获得更详细的信息,问 AI 或者在社区或者用户群提报错误。
在 Zion 中使用
- 导入:点击添加组件,选择“导入”,点击“导入组件库”即可。
- 同步:代码变更后需同步或重新发布。
- 使用:拖拽组件到画布,配置右侧属性面板(数据绑定、事件)。
微信小程序开发说明
前置条件
- 安装最新版全局命令行工具
- 小程序端与网页端代码组件库分离
- 小程序有主包/分包大小不超过 2MB 的限制,注意代码组件库的大小
开发说明
- 直接使用 HTML 组件:
// 在小程序编译产物中,这段会变成 <view>Hello world</view>
<div>Hello world</div>- 直接使用 wx:
// 1.在 src/typings/global.d.ts 中加入
declare const wx: any;// 2.使用
wx.createSelectorQuery().select('#xxx').boundingClientRect((rect: any) => {
// console.log(rect)
}).exec();- 使用 @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>- 使用 taro-ui:
npm i taro-ui
# 如遇依赖冲突可用:
npm i taro-ui --legacy-peer-depsimport { 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