liyang24@meituan
标准化UI组件开发,统一管理、索引所有组件
美团有300+的纯前端童鞋
分布在北京、上海 & 厦门
以业务区分做的话,有主站、i版主站、各种商家后台、酒店、外卖、猫眼电影等等
(基本每个业务线都有个专属的前端团队)
・・・
基础组件
业务组件
Web Pages
面临的问题
爬虫服务:规范约定
从内网(npm.sankuai.com)、外网(npmjs.com)抓取符合条件的组件
组件预览:检索 & 分享
Web站点:components.sankuai.com
移动App:iOS & Android
开发工具
@mtfe/rt (rt-core)
├── README.md
├── examples # 示例目录
│ ├── index.android.js # android 示例源代码
│ └── index.ios.js # ios示例源代码
└──────── index.js # 组件源码
{
"keywords": ["mt-component"], # 关键字
"examples": [
"examples/index.android.js", # 指定example所在位置
"examples/index.ios.js"
]
}
结构示例
package.json 中应该包含
── web-component
├── ChangeLog.md
├── README.md
├── assets # 組件依賴的靜態資源(構建後)
│ ├── index.css
│ └── img.png
├── build # 供 Component Hub使用(演示Demo)
│ └── examples
│ ├── demo.html
│ └── demo-advance.html
├── lib # 構建後的JavaScript源碼(組件)
│ └── index.js
├── src # 源碼(提供es6/7源碼)
│ ├── index.js
│ └── assets # 欲構建的CSS樣式資源
│ └── index.(css|scss|less)
发布npm包的目录结构
满足规则的组件均会定期被抓取& 录入到组件中心仓库中 ...
@mtfe/rt
(Rabbit Tools)用于辅助用户开发标准组件的cli工具
npm --registry=http://r.npm.sankuai.com i @mtfe/rt@latest -g
创建一个组件项目
$ rt init simple-component #以simple-component为名创建一个项目
# 回答问题:组件类型(React、Angular等)、CSS预处理器选择(sass|less)等
# 创建simple-component文件夹 & 初始化项目文件
# 安装npm依赖
$ cd simple-component && npm start # 启动开发服务器
# enjoy 开发过程吧~
── simple-component
├── ChangeLog.md
├── README.md
├── assets # 組件依賴的靜態資源(構建後)
│ ├── index.css
│ └── img.png
├── examples # 組件演示的源碼
│ ├── demo.js
│ ├── demo-with-bootstrap.js
│ └── demo-with-bootstrap.html
├── build # 供 Component Hub使用(演示Demo)
│ └── examples
│ ├── demo.html
│ └── demo-advance.html
├── lib # 構建後的JavaScript源碼(組件)
│ └── index.js
├── src # 源碼
│ ├── index.js # es6/7 語法糖
│ └── assets # 欲構建的CSS樣式資源
│ └── index.(css|scss|less)
├── test.setup.js # 測試環境配置
├── test # 組件測試
│ └── index.spec.js
项目结构(React Web 举例)
如何开发组件 & 写示例?
1. 启动开发服务器:npm start
3. 修改src/examples目录下JavaScript等文件
2. 打开 http://localhost:3001/ (查看示例)
你修改任何文件的同时立刻能看到效果
无需重启开发服务器 & 刷新浏览器页面
如何写样式?
如何写测试?
test/*目录下的任意文件都是测试文件
如何发布组件?
$ npm run pub
有些组件是针对移动端开发的(如Touch事件依赖)
在移动端演示更加直观
React Native组件跟Web组件非常不一样
无法在Web页面上交互和预览
对于开发者,需要对组件进行截图(gif动态图),并自行生成出Html页面及代码。