毫末科技前端团队居然用 imgcook 开发 2000+ 模块?

avatar
阿里巴巴 前端委员会智能化小组 @阿里巴巴

文/毫末科技 - 庄小铎、胡小根、阿里淘系 F(x) Team - 苏川

毫末科技 是一家行业软件定制开发公司,涉及行业有办公协作类、区块链、数据可视化、零售电商、智慧环保、智慧水务、智慧环卫 、智慧检务、智慧政务、智慧物流、智慧教育、智慧制造、物联网、数据分析、网络及安全、O2O、P2P、B2B、B2C 等。


移动端、web端页面均有开发,前端主要技术栈有 vue、react、flutter、uniapp、taro、html 等。使用了 imgcook sketch 插件导出、自定义 DSL、CLI 命令行、plugin 插件等能力来提升前端代码开发速度。 ​

从 2020-02-03 开始到 2021-05-25,在 imgcook 创建模块数量达 2000+,覆盖60+前端项目,帮助研发提效 40%+。

使用情况

  • 时间:从 2020-02-03 开始到 2021-05-25,其中有 165 天使用 imgcook 生成代码
  • 使用情况:在 imgcook 创建模块数量达 2000+,覆盖 60+ 前端项目。
  • 使用人群:前端、设计师
  • 使用人数: 26人左右
  • 提效效果:提效 40%,一个普通移动端页面不使用 imgcook 可能需要一天时间开发,而使用 imgcook 需要时间)半天时间即可完成。

为什么用 imgcook?

  • 1、主要提高前端代码开发速度
  • 2、示例页面-PC端-vue页面:

研发步骤

第 1 步:从 imgcook sketch 插件 导出到编辑器


第 2 步:编辑器设置

1、设置生成的尺寸

手机端页面生成

默认情况,uniapp 和 taro 生成的代码都是为手机端服务的。手机端生成代码时,遵循以下规则生成: ​

1、同一个项目中,所有待生成元素的宽度相同。通常手机端的设计稿,Artboard 的宽度为 375px 或 750px,那么上传到 imgcook 里的所有的设计元素宽度都保持 375px 或 750px。 ​

2、生成出来的代码是移动端屏幕自适应的。uniapp 和 taro 的自适应机制有所不同。 ​

  • uniapp:官方推荐采用 rpx 单位实现移动端的自适应。毫末生成的移动端的 uniapp 的代码,以rpx为单位实现自适应。
  • Taro:官方推荐采用 px 或者百分比 %。Taro 在编译为 H5 时会将 px 的尺寸转换为 rem,编译小程序时会将 px 的尺寸转换为 rpx。由于毫末生成的 style 代码为 js 文件,Taro编译器无法自动转换 px 像素。为了解决这个问题,毫末采用了 Taro 推荐的 Taro.pxTransform() 函数来控制自适应。

​Pad & Web 端页面生成

有时候需要生成 pad 端甚至桌面端的应用,也就存在需要生成局部视觉代码的情况(无法跟手机端应用一样,强制要求所有待生成元素的宽度保持一致)。如果不加任何配置项,那么生成出来的代码就不存在自适应性(布局混乱)。 ​

为了解决这个问题,在 imgcook 的 web 管理端中,对 Page 元素增加了两个属性以实现 pad 或桌面应用的局部代码屏幕自适应。 ​

export default {
  designWidth: 1920,    // 设计稿宽度
  responsive: "vw"      // 配置responsive时,css自适应采用vw单位。responsive不配置的情况(只配置designWidth)下,uniapp默认采用rpx控制自适应(在pad下体验较好),Taro默认采用Taro.pxTransform()函数来控制自适应。
}

配置截图如下:


2、设置组件

由于 imgcook 生成的所有的元素都为 Div/Text/Image,对于表单元素及复杂组件还没有较好的支持。 ​

毫末内部结合 xmind2code 配置的组件,实现了 imgcook 的组件替换。毫末 imgcook 的组件替换,替换的是 xmind2code->ui config 文件中的组件。目前支持非容器型组件(input/button等)。暂时不支持容器型组件(例如Tab等)替换。 ​

在导出代码时,会使用插件 @imgcook/hm-replace-component 来替换组件。 ​

imgcook install @imgcook/hm-replace-component@0.0.9

imgcook的schema中,主要有三类UI元素: ​

  • Div
  • Text
  • Image

原则上,imgcook 中的以上三类元素,可以替换为毫末配置的任意组件。建议的替换如下:

  • Text: imgcook 自动替换。无需替换。
  • Image: imgcook 自动替换。无需替换。
  • Div: 可以配置替换为其他组件

替换步骤: ​

  • 1、在 imgcook 的 web 界面上,配置 Div 的额外属性:hm-component=\
export default {
  'hm-component': 'van-button'
}

配置截图如下:


第 3 步:用 cli 命令行导出代码

安装并配置 imgcook cli

官方介绍:

imgcook-cli 可以结合 Plugin 的能力将 imgcook 平台生成的代码产物一键放置到你的本地项目工程里,无缝融合到你的研发流程,如果你有对 imgcook 生成代码的产物有加工需求(比如使用 Plugin 开发自动上传图片到自己的图床、文件目录转换等),imgcook-cli 会是你应用 Plugin 的不二之选。

npm install -g @imgcook/cli
imgcook config edit # 配置imgcook。

为 cli 配置 Plugin,这里官方会默认配置 plugin

然后添加上自定义的 plugin:

  • 组件替换插件 @imgcook/hm-replace-component

最后配置如下:

{
  "accessId": "RolT******V3d1",
  "dslId": "259",
  "generator": [],
  "plugin": [
    "@imgcook/hm-replace-component",
    "@imgcook/plugin-images",
    "@imgcook/plugin-generate"
  ],
  "uploadUrl": ""
}

导出代码

拉取模块代码,写入到文件目录的一个路径下 ​

# 拉取某个模块代码到本地路径
imgcook pull <moduleId> --path <path>

# 例子
imgcook pull 17108 --path ./src/mods/mod17108

使用了哪些 imgcook 能力?

imgcook Sketch 插件导出能力

直接 imgcook首页下载 imgcook sketch 插件使用即可。


使用 imgcook 插件导出图层数据,粘贴到 imgcook。 ​


imgcook 自定义 DSL 生成视图代码能力

imgcook 提供了自定义 DSL 能力,我们可以根据 imgcook 提供的数据和能力生成自己所需的代码。 毫末科技共开发了 10 个 imgcook DSL,用于满足不同应用的代码生成需求: ​

imgcook cli 能力

imgcook-cli 可以结合 Plugin 的能力将 imgcook 平台生成的代码产物一键放置到本地项目工程里,我们通过 cli 命令行下载代码到本地项目文件中。

imgcook plugin 插件能力

在使用 imgcook cli 下载代码时,可以通过配置自定义 plugin 对 imgcook 平台生成的代码产物加工处理,我们自定义了 @imgcook/hm-replace-component 插件,用于将我们在编辑器中设置的组件属性替换为自己的组件。

相关链接

向团队介绍 imgcook

如果希望团队用上 imgcook D2C 能力,但又不知道如何介绍 imgcook,我们帮你准备好了介绍文案和 PPT,快来自取吧~ ​

1、组织一个分享会

我们可以将团队同学们召集在一起,组织一个团队内部的分享会,介绍下研发提效利器 imgcook。

2、播放 imgcook 的产品介绍视频

可以播放一下 imgcook 的产品介绍视频,让大家对 imgcook 的功能有一个全方位的了解。视频链接:

或者您也可以直接在 imgcook 网站现场演示。 ​

介绍文案: ​

imgcook 是阿里巴巴对外开放的一个设计稿智能生成代码平台,可以将 Sketch、PSD、Figma、图片等类型的设计稿一键生成可维护的前端代码,例如 React、Vue、小程序等,还可以自定义生成的代码。 ​

我们可以安装 Sketch、Photoshop、Figma 插件使用插件导出图层数据到 imgcook 或者直接在 imgcook 编辑器中上传设计稿文件解析,然后在imgcook 编辑器中查看生成的代码。

3、详细介绍 imgcook 使用动线

介绍文案:

  • 1、导入设计稿,支持从 imgcook 插件导出生成代码或上传设计稿文件解析生成代码两种方式。
  • 2、提供设计稿协议支持用户人工标记图层来生成代码(对于目前imgcook处理不是很好的场景都可以用这种方式解决)
  • 3、imgcook 智能生成的原理是将描述设计稿文件的 JSON Schema 经过设计稿协议、程序算法和机器学习算法的分析、计算和识别,转换成一个具有合理的 Flex 布局嵌套结构和代码语义的 imgcook JSON Schema,然后再将这个 Schema 用各种不同 DSL 转换函数转换成各种不同类型的前端代码。
  • 4、imgcook JSON Schema 可以在 imgcook 编辑器中查看,我们可以在可视化编辑器中修改视图、样式等,本质是修改这个 JSON Schema。
  • 5、查看代码,本质是将最终的 imgcook JSON Schema 输入给自定义的 DSL 转换函数,函数的输出就是前端代码。

4、可以举例说说哪些团队是如何使用的

本文档有一些用户使用案例,可以给大家看一下,包括 imgcook 开放的能力。后续用户案例会在 imgcook 官网透出。

5、了解 imgcook 的小缺陷,可以帮助更好的使用

imgcook 虽然能够自动生成可维护性较高的代码,但设计稿图层千变万化,有一些场景目前还没有覆盖到。例如:

  • 设计稿关联图层合并问题:氛围、背景、图标等在设计稿中由多个图层组成,生成代码是需要合并导出成一张图片
  • 布局合理性问题:imgcook 生成的布局嵌套结构不合理或不符合预期
  • UI 逻辑代码生成问题:设计稿中的数据是静态的,实际线上数据是动态的,会带来一些 UI 的变化,但这些 UI 变化在设计稿转代码时无法获知

对于这些问题,imgcook 提供了设计稿协议支持用户手动干预图层的方式来解决,也可以在生成之后在 imgcook 编辑器中可视化调整。

6、了解更多

imgcook 有钉钉用户群,如果使用上有问题可以在群里提问。可以关注 imgcook 官网和掘金账号关注进展。

用户案例征集

如果您的团队接入了 imgcook 提供的 D2C 服务或者您自己有使用 imgcook 的心得,欢迎在本文评论区留言或直接贴上文章链接(ATA、掘金、知乎等技术分享网站均可)。

将有机会获得 imgcook 定制礼品。 ​


如果有使用问题,欢迎入群。阿里内部用户请加入 imgcook 内部上帝群,社区用户请加入 imgcook 社区上帝群。 ​




淘系前端-F-x-Team 开通微博 啦!(微博登录后可见)
除文章外还有更多的团队内容等你解锁🔓