title:
order: 3

category: 物料

基础规范

  • 区块名称: 大驼峰写法, 如 ExampleBlock, 遵循简练能表达组件含义的原则
  • 基础编码码规范: JavaScript Style Guide
  • CSS 规范: CSS-in-JS

添加区块

在快速入门中,大家应该有了初步的印象,接下来我们来了解如何开发一个自定义区块,进入初始化的项目,使用 ice-devtools add 添加区块,添加流程的规则如下:

  1. cd my-materials
  2. ice-devtools add
  3. ? 选择添加类型 (Use arrow keys)
  4. 区块
  5. 模板
  6. // 必须输入
  7. ? 名称(name):
  8. // 必须输入
  9. ? 中文名(title):
  10. // 可选
  11. ? version(1.0.0)
  12. // 必须输入
  13. ? 描述(description):
  14. // 必须输入
  15. ?分类(categories):
  16. ❯◯ 表格
  17. 表单
  18. 图表
  19. 其他
  20. // 可选
  21. ?作者(author):

根据提示输入对应的区块信息,添加完成后会在 my-materials/blocks/ 目录下新增一个区块,进入到该目录下,运行以下命令进行开发,假设初始化的区块为 Login :

  1. // 区块目录
  2. $ cd blocks/Login
  3. // 启动区块服务
  4. $ npm start

运行 npm start 自动打开一个浏览器窗口如下:

block

目录结构

进入到我们刚刚初始化的区块,可以看到如下目录结构:

  1. .
  2. ├── README.md // 说明文档
  3. ├── package.json // pkg
  4. ├── screenshot.png // 区块截图
  5. └── src
  6. └── index.jsx // 区块代码片段入口

目文件说明

  • src/index.jsx: 提供了基础的区块模板代码规范,方便快速开发一个区块
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import Container from '@icedesign/Container'
  4. const Login = () => {
  5. return (
  6. <Container style={styles.container}>
  7. <h3 style={styles.title}>ICE Block</h3>
  8. <p style={styles.description}>Edit src/index.js and save to reload.</p>
  9. </Container>
  10. )
  11. }
  12. const styles = {
  13. container: { ... },
  14. title: { ... },
  15. description: { ... }
  16. }
  17. export default Login;
  • package.json: 主要描述区块的信息

在物料设计中区块以 npm 包的形式存在,但区块并不是一个完整的 npm 包,因为它不能通过 npm install 的方式下载使用,其本质上只是代码片段,需要借助 Iceworks 下载生成到对应的项目中进行使用。 一个区块的 package.json 信息结构和正常 npm 包的形式是完全保持一致的,但除了遵循 npm 包的字段之外,还需要补充 blockConfig 字段,用于描述区块的名称,截图,标题,分类等信息,主要用于 Iceworks 和站点展示使用,在创建区块时这些字段会自动生成。

设计成 npm 包的形式原因主要是利用 npm 的托管服务和版本管理功能对区块进行维护管理,同时会根据这些元数据生成对应的数据源,详细可以查看物料数据规范。

  1. {
  2. "name": "<%= name %>", // 区块名
  3. "version": "1.0.0",
  4. "description": "<%= description %>", // 区块描述
  5. "author": "",
  6. "files": [
  7. "src/",
  8. "build"
  9. ],
  10. "repository": {
  11. "type": "git",
  12. "url": "https://github.com/<%= repo %>/<%= name %>" // git url
  13. },
  14. "license": "MIT",
  15. "keywords": ["block"],
  16. "dependencies": {
  17. "react": "^16.3.0",
  18. },
  19. "blockConfig": { // 区块的相关配置,用于 Iceworks 和站点的展示
  20. "name": "<% name %>", // 名称 (必须)
  21. "title": "<% title %>", // 标题 (必须)
  22. "categories": "<% categories %>" // 分类 (必须)
  23. },
  24. "publishConfig": {
  25. "access": "public",
  26. "registry": "<% registry %>" // npm 源
  27. },
  28. }
  • README.md: 说明文档

包含区块名、区块简介等基本字段,除此之外,你也可以按需添加其他说明,仅用于开发时作为参考文档使用。

  1. # ExampleBlock
  2. 简介:示例区块

编写区块

经过上面的步骤,对区块的定义应该有了初步的了解,接下来你可以按照实际的业务进行区块开发和区块沉淀。

这里简单演示下,进入 src/index.js ,将将初始化的区块模板代码进行简单的修改:

  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import Container from '@icedesign/Container'
  4. const Login = () => {
  5. return (
  6. <Container style={styles.container}>
  7. - <h3 style={styles.title}>ICE Block</h3>
  8. + <h3 style={styles.title}>My first block</h3>
  9. <p style={styles.description}>Edit src/index.js and save to reload.</p>
  10. </Container>
  11. )
  12. }
  13. const styles = {
  14. container: { ... },
  15. title: { ... },
  16. description: { ... }
  17. }
  18. export default Login;

回到浏览器窗口看到页面如下,说明你的第一个区块已经正常工作了,当然实际的区块开发可能并没有这么简单。

block

发布区块

这里我们再来简单演示一下区块开发完成后,如何将新增的区块发布到 Iceworks 中,分享给其他的开发者进行使用。在上面对区块的 package.json 的详细介绍中我们知道,区块都是托管在 npm 上的,通过 npm 的机制进行发布和下载到项目中,因此发布区块的流程实际上也就是发布一个 npm 包的过程。

注:如果你还没有发过 npm 包或者对 npm 包的发布流程不了解,需要先简单了解下 npm 的相关知识,这里推荐 npm 官网 和阮一峰写的 npm 模块管理器

  1. # 在 blocks/Login 目录下
  2. $ npm publish

生成数据

区块发布完成后,我们需要重新生成物料源数据,以此更新对应的区块信息。在项目根目录下执行 npm run deploy 即可重新生成并更新物料源数据。

  1. # 在项目根目录下
  2. $ npm run deploy

验证数据

当物料源更新后,我们打开 Iceworks 进入到区块界面,点击刷新按钮,如果看到对应的区块截图已经更新,即可说明区块的相关信息也已经更新。此时,下载到项目的代码也即是最新的区块代码。

皮肤配置

如果希望在预览区块时,也带上皮肤配置,可以参考这份文档进行配置。