首页 > 其他分享 >阿里低代码引擎 | LowCodeEngine - 如何将新组件库接入物料,以TDesign为例

阿里低代码引擎 | LowCodeEngine - 如何将新组件库接入物料,以TDesign为例

时间:2023-11-02 12:33:20浏览次数:43  
标签:TDesign lowcode tdesign demo 为例 js materials LowCodeEngine 组件

阿里低代码引擎默认提供了以antd为例的物料,并搭建了以antd为物料的示例demo,但实际中我们使用的不一定就是antd,有可能是别的组件库,也有可能是自己公司的组件库,这里就以自己为例告诉大家如何将新组件库接入阿里低代码引擎的物料中,以腾讯的组件库tdesign为例。

先看阿里低代码引擎的demo示例,我们此次目标将demo示例【基础antd组件】中的button组件换成腾讯组件库tdesign的button按钮。
image.png
有些东西需要提前知道,但不需要深究,只要记住我说的即可。接下来有两个我认为比较容易搞混的内容:

  1. meta.js 我将其成为物料描述文件,配置的是组件有哪些属性、这些属性的类型是什么、组件的变量名、文案、拖到画布上时的默认值等这些。

下图红框圈中的文件就是antd物料描述文件,我们接下来就是要修改它,比如将按钮下的文字【主按钮】改成【腾讯主按钮】,大致的操作是:魔改antd的低代码物料仓库【即lowcode-materials】→编译打包替换下图中的meta.js,以此来摸索如何修改替换、物料描述文件中各属性与实际效果之间的映射关系。
image.png
如果你仔细看了文档 https://lowcode-engine.cn/site/docs/guide/expand/editor/cli,文档中有说使用他们提供的脚手架来搭建物料项目,好处是有提供 npm scripts 命令可以直接运行查看修改效果,缺点就是只有一个简单的空架子。此处我选择的是直接 clone 他们的仓库进行修改,我个人认为这个更简单些,提供了现成的示例,更方便我们参考及 copy 。
接下来正式开始。

文章很长很细节,不清楚的大家可以在评论区截图圈红留言,我会二次完善补充。

  1. 将 lowcode-demo 从 Github 仓库中 clone 下来,这个将用于后续我们验证我们接入物料是否成功了。
  2. 将 lowcode-materials 从 Github 仓库中 clone 下来,我们将修改这个仓库后,构建物料接入到 lowcode-demo 中验证。
  3. 将 lowcode-materials/packages/antd-lowcode-materials 文件夹 copy 一份,将其命名为 tdesign-lowcode-materials,并将其提交到 git 仓库,方便我们后续通过 git 查看我们真正修改的地方。
  4. 将 tdesign-lowcode-materials 的 package.json 的 name 从 @alilc/antd-lowcode-materials 修改成 @alilc/tdesign-lowcode-materials,避免与另外一个物料的包名发生命名冲突。
  5. 修改 tdesign-lowcode-materials 的 build.lowcode.js 里的变量 library 从 AntdLowcode 修改成 TDesignLowcode,后续产出的 UMD 包暴露的变量名就是这个。
  6. 为了减少干扰我们只做最简单的修改,我们希望将可以直接拖出来大小分别是大小中的按钮,并可以通过属性栏调节大小的、按钮中的文字分别是大中小号按钮。
  7. 为了让拖出来的按钮是可调节的,我们修改 tdesign-lowcode-materials/lowcode/button 下的 meta.js,如图进行更改,antd 对大小的定义是 large/middle/small,而 tdesign 对大小的定义是 large/medium/small,因此我们需要将 middle 改为 medium。其中 defaultValue 是默认值,等同于我们使用某些组件时未传入某些属性但却能正常显示使用,就是因为组件内部使用了默认值,一般我们取中间值,即 medium,其他属性可以以此类推。

image.png

  1. 为了能拖出三种大小的按钮,我们修改 tdesign-lowcode-materials/lowcode/button 下的 snippets.ts,如图修改,我们按钮默认的是 medium 中等大小,如果需要拖出来是大号按钮和小号按钮,那势必需要进行覆盖设置,类似于我们往组件的 prop 传递新的属性值以覆盖组件内的默认值。

image.png

  1. 另外设置按钮中的文字分别是大中小号按钮,也是同理,再次不再过多赘述。
  2. 改配置的都配置好了,既然我们使用的是新组件库,接下来我们就需要安装/导入新组件库并打包构建。
  3. 在 tdesign-lowcode-materials 目录下安装腾讯 UI 组件库 tdesign-react
  4. 在 tdesign-lowcode-materials/src/components/button/index.tsx 文件,如图进行修改,将导入 antd 蚂蚁 UI 组件库改为导入 tdesign-react 腾讯 UI 组件(其他组件以此类推)

image.png

  1. 这是一个新的物料,我们将它 package.json 中的 version 版本改为 1.0.0
  2. 在 tdesign-lowcode-materials 目录下开启终端执行 npm run build 和 npm run lowcode:build 进行构建(在 win 下无法构建会报错,原因详见:https://github.com/alibaba/lowcode-engine/issues/301
  3. 构建完成后在 tdesign-lowcode-materials 目录下会多出 build、es、lib 三个文件夹,继续在终端执行 npm pack 将构建的产物进行打包,将其打成可以被其他项目 npm install 的包
  4. 将 build 文件夹内的文件进行静态资源部署,我们需要其中的 view.js、view.css、meta.js,为了模拟 http/https 网络环境我使用 http-server 这个进行本地静态资源部署(具体这个库如何使用自行百度),记得开启 CORS,部署后以上三个文件的地址是:
http://127.0.0.1:8080/lowcode/meta.js
http://127.0.0.1:8080/lowcode/view.js
http://127.0.0.1:8080/lowcode/view.css
  1. 我们前往 lowcode-demo 项目,将 demo-basic-antd 拷贝一份并重命名为 demo-basic-tdesign,并提交到 git 仓库(方便我们后续通过 git 提交记录查看我们的修改处)
  2. 将第 15 步打的 tgz 包拷贝到 lowcode-demo/demo-basic-tdesign 目录下,并在当前目录终端中执行 npm install ./tgz包的名字 命令进行本地安装(推荐使用 npm 而不是 yarn,因为 yarn 安装同版本号的包时并不会更新最新内容,它会直接读取缓存,除非你在每次 pack 打包时都修改版本号让打出来的包是新版本号)
  3. 在 lowcode-demo 项目下,修改 demo-basic-tdesign\src\services\assets.json 这个文件,我们在原来的基础上,在 packages 中添加 tdesign 的资源地址,我们本次使用的 tdesign 版本是 v1.1.14,所以添加如下:(我们可以去 jsdelivr 获取 tdesign 可以被浏览器直接加载的资源地址)
{
  "package": "tdesign",
  "version": "1.1.14",
  "urls": [
    "//unpkg.com/tdesign-react/dist/tdesign.min.js",
    "//unpkg.com/tdesign-react/dist/tdesign.min.css"
  ],
  "library": "TDesign"
},
  1. 还是在同样的文件,我们在 packages 下补充以下配置:
{
  "package": "@alilc/tdesign-lowcode-materials",
  "version": "1.0.0",
  "library": "TDesignLowcode",
  "urls": ["http://127.0.0.1:8080/lowcode/view.js", "http://127.0.0.1:8080/lowcode/view.css"],
  "editUrls": [
    "http://127.0.0.1:8080/lowcode/view.js",
    "http://127.0.0.1:8080/lowcode/view.css"
  ]
}
  1. 还是在同样的文件,我们在 components 下补充以下配置:

其中 exportName 的属性值 AlilcTdesignLowcodeMaterialsMeta 这个可以去 meta.js 中 ctrl+f 查询 LowcodeMaterialsMeta 后缀获取,如下图,如果你使用其他组件库,以此类推获取

image.png

{
  "exportName": "AlilcTdesignLowcodeMaterialsMeta",
  "npm": {
    "package": "@alilc/tdesign-lowcode-materials",
    "version": "1.0.0"
  },
  "url": "http://127.0.0.1:8080/lowcode/meta.js",
  "urls": {
    "default": "http://127.0.0.1:8080/lowcode/meta.js"
  }
}

标签:TDesign,lowcode,tdesign,demo,为例,js,materials,LowCodeEngine,组件
From: https://www.cnblogs.com/blueju/p/17805137.html

相关文章

  • kettle/ckettle进行参数对称加解密-AES为例
    ckettle/kettle字段加密对称加密机制方法调用链kettle-core-2.3.0.1-SNAPSHOT.jar:进行秘钥加密保护(不涉及实际业务处理) org.pentaho.di.core.encryption.Encr org.pentaho.di.core.encryption.TwoWayPasswordEncoderInterface 使用BigInteger进行或运算来进行秘钥加密解......
  • 将智能合约部署到测试网中,以Sepolia为例
    首先选择alchemy创建一个以Sepolia为测试网的app如下所示 然后将HTTPS的地址复制到PRC_URL中打开自己的MetaMask钱包,并与Apps的网络互联,复制钱包私有地址到PRIVATE_KEY中 然后部署到代码中即可 实现效果如下 ......
  • AntDesignVue 通过点击确定按钮实现文件上传
    示例图相关代码<template><div><a-modalv-model:visible="props.uploadVisible"width="1300px":footer="null"maskClosable@......
  • stm32单片机在Keil环境下定义的变量都存储到哪去了?(以STM32f1系列为例)
    stm32f1系列单片机,在keil5环境下编译后显示四个储存区域,分别是Code,RO-data,RW-data,ZI-dataCode为程序代码部分RO-data表示程序定义的常量constRW-data表示已初始化的全局变量ZI-data表示未初始化的全局变量储存区域如下:Code,RO-data,RW-data............flashRW-......
  • 浅析“圆”在中国古典舞创作中的运用——以《踏歌》为例(文档)
    目录摘要IAbstractII一、绪论1(一)研究背景1(二)研究的目的及意义1(三)研究方法21.文献研究法22.经验总结法23.个案研究法2二、中国古典舞“圆”的概述3(一)中国古典舞中“圆”的认知3(二)中国古典舞中“圆”的表现形式31.静态造型中的“圆”32.动作呈现时的“圆”43.舞蹈动......
  • uniCloud cms 自媒体资讯新闻文章应用系统 uniapp+uniCloud+AntDesignVue Life cms
    介绍LifeCMS是uniCloud+uni-app云端一体全套CMS/自媒体/资讯/新闻/文章应用系统,前台包含注册、登录(账号密码登录、短信登录、微信手机号快捷登录、微信一键登录、App手机一键登录、Apple登录)、文章列表、文章详情、搜索、广告、分享、评论、回复、点赞、收藏、用户中心、意见......
  • HOOK技术(以键盘HOOK为例)
    一.回调函数介绍如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调函数的机制如下:定义一......
  • linux kernel的启动参数是怎么拿到的-以arm64为例
    linuxkernel拿到启动参数一定是在boot阶段,那就必须从start_kernel找起。asmlinkage__visible__init__no_sanitize_address__noreturn__no_stack_protectorvoidstart_kernel(void){。。。setup_arch(&command_line);setup_arch的参数里有command_lin......
  • 以PMIC为例简析Linux MFD/Remap/Regulator的使用
     关键词:ADI、SPI、Regmap、MFD、Regulator、PMIC等等。 以SC27XX为例,梳理一个PMIC用到的内核模块。1.MFD框架MFD是Multi-FunctionDevice,MFD子系统是Linux下一种用于管理和控制多功能设备的软件框架。他提供一种统一接口,使得多个设备可以通过一个驱动程序进行管理和控制。K......
  • 系统调用实现原理(Printf函数为例)
    系统调用实现(Printf函数为例)调用程序时,会检查当前段的CPL(位于CS中),与目标段的DPL(位于gdt中),如果权限不够无法执行,所以我们无法以用户态直接访问某些指令并执行。而通过系统调用可以从用户态转变为内核态,执行相关程序。实现的方法为0x80中断,改变CS中的CPL为0。、以printf函数为例,其......