组件化规范实践
以下以QQ旗下的花样直播业务为例
组件命名
命名规范:[适用平台]-[所用框架]-[功能前缀]-组件用途名
组件用途名尽量表达清晰,不要过多简写
- 适用平台取值:
- 空:不限定平台
- hy:花样直播、交友(花样独占的全部用这个,包括签约平台等,具体的平台说明写在文档里)
- mqq:手Q
- 所用框架取值:
- 空:无框架
- react:使用react(react-like的也用这个字段,如实在与react的区别很大,可自写)
- vue:使用vue
- ...:其他,自己写
- 功能前缀取值(目前仅列了一部分,欢迎补充):
- ui:UI组件
- report:上报相关组件
- utils:类似以前存在utils里的公用方法
- 空
示例:hy-react-ui-mtoast、hy-ui-pctips、hy-mapi、hy-pcapi、report-tdbank、report-isd、utils-debounce、img-lazyload
组件文档
组件分为:
- README.md,给用户看的
- README_DEV.md,给开发组件的人看的
- CHANGELOG.md 更新日志,把每次更新发布内容摘要记录下来,记录形式:版本号 (日期) 更新摘要
给用户看的文档要点
- 组件用途、安装方式
- 适用平台:花样直播PC、花样交友PC、手Q、花样直播iOS、花样直播Android、花样交友Android、签约平台等
- 使用框架:react、react-like、vue、无框架
- 依赖库:jquery、zepto、等等等
- 跨浏览器使用请说明浏览器兼容性:PC(浏览器版本)、Mobile(iOS、Android版本、浏览器内核版本)
- API说明、Example
给组件开发者看的文档要点
- 开发调试方式(构建命令、example怎么跑)
- 测试方式(如有)
- 持续集成方式(如有)
- 发布方式
组件代码要求
- 源码统一使用ES2015编写,使用import, export做模块化释出的可用版本要用babel编译好
- 不要污染全局namespace,css请带上组件前缀
- 如果有测试代码、自测用例最好,没有也不影响,但一定要自测好。自动化测试方式待实践后补充
- 注释使用jsDoc风格 要求注释到位,变量声明写清楚用途,关键逻辑一定要写注释,接口一定写清楚用途、入参出参 (jsDoc参考:http://www.css88.com/doc/jsdoc/tags.html 、http://usejsdoc.org/)
- 一定要注意组件的性能
- 第一次写不懂如何组织代码,请参考现有组件代码
react组件化参考
- 代码最佳实践
- 暴露出来的属性请用propTypes声明好
- props默认值使用defaultProps声明
- 尽量不要直接操作DOM,谨慎使用refs
- state只存渲染相关变量,不允许存其他值
- react组件化思想
- react组件化的好文:重新设计React组件库,组件的规范与自由、数据的耦合与解耦
- 使用high order component(hoc)思想:介绍1、介绍2
- 用好children来复用高阶组件:children如何修改
- 其他欢迎补充
上传npm
package.json要求
- 每次发布,
version
都要改变,规则使用npm官方推行的semver: 版本格式:主版号.次版号.修订号
,版号递增规则如下: - 主版号:大改动,不向下兼容,更新主版号
- 次版号:新增或改动了功能,向下兼容,更新次版号
- 修订号:修复了bug,向下兼容,更新修订号
构建说明
- 构建命令都写在
package.json
的script
里,请遵循这个规范,便于别人在看你的组件源码时,方便找到构建信息。构建命令建议使用以下几个: start
:开发调试dist
:构建组件发布内容,通常拿来测试发布内容是否符合预期prepublish
:npm官方命令,在npm publish之前被执行,详细参考npm-scriptslint
: 用于协助开发者写迅速发现不符合规范的代码,建议全局安装eslint
和stylelint
(https://docs.npmjs.com/misc/scripts)- 组件构建需要思考构建出的最终文件,给用户使用时能否__避免出现过多冗余__ 比如react的UI组件,如果完整构建会把react的包也打进去,别人引用你组件多了几百k那肯定要完,因此在许多组件中,build我们用babel-cli的命令跑一下就可以了,无需用构建做模块化加载 反之,如果你构建出来的包,不会让用户在使用时产生过多冗余,那么你就可以考虑构建编译出用户直接能用的包,让用户的构建不用来解析node_modules
- 组件的开发构建脚手架,推荐steamer
发布步骤
1. 注册用户
$ npm adduser
2. 发布,在包的根目录执行
$ npm publish
3. 给别人维护,需要增加npm包owner权限,否则非owner无法上传npm
- 查看现有npm包的owner成员,ls后写包的名字:
$ npm owner ls react-list-scroll
- 新增owner,add后面写新增的owner名字及包的名字
$ npm owner add ningj react-list-scroll