打造 Vue.js 组件库 黄轶
2020-03-01 852浏览
- 1.打造 Vue.js 组件库 ⻩黄轶
- 2.北北京科技⼤大学毕业,计算机专业硕⼠士 曾任职百度、滴滴,现担任Zoom前端架构师 慕课⽹网明星讲师 Vue.js 布道者,《Vue.js 技术揭秘》独⽴立作者, 《Vue.js 权威指南》主要作者 ⻩黄 轶 Github:ustbhuangyi 开源项⽬目 better-scroll 作者,并主导滴滴开源项⽬目 cube-ui,建⽴立团队技术博客 对前端⼯工程化,前后端性能优化有丰富的经验
- 3.⽬目录 CONTENTS 背景 组件设计 ⼯工程化
- 4.背景
- 5.背景 • 从业务⻆角度看,业务成⻓长到⼀一定规模后,共性的地⽅方需要复⽤用。 • 从设计⻆角度看,产品会遵循⼀一定的设计规范,需要保证产品⼀一致性。 • 从开发效率⻆角度来看,需要快速响应业务开发。 • 从维护⻆角度来看,需要统⼀一管理理代码,不不希望到处复制粘贴。
- 6.组件设计 • 设计原则 • 开发规范 • 模块依赖
- 7.设计原则 就近管理理 ⾼高复⽤用性 分层设计 灵活扩展
- 8.设计原则-就近管理理 • 单⽂文件开发 • 依赖的静态资源放在同级⽬目录 • 相关联组件也放在同级⽬目录 cube-ui element-ui
- 9.设计原则-⾼高复⽤用性 • ⻚页⾯面级别的复⽤用(基础组件) • 项⽬目级别的复⽤用 —私有组件库(业务组件) • 公司级别的复⽤用 —开源组件库(element-ui、cube-ui)
- 10.设计原则-分层设计 通过分层设计的思想设计复杂组件 城市选择器器组件、时间选择器器组件 联动选择器器 CascadePicker 实现 基础选择器器 Picker 实现 弹层类组件 popup 基础滚动 better-scroll
- 11.设计原则-灵活扩展 组件设计要尽量量灵活可扩展,除了了提供丰富的 Props,还可以利利 ⽤用 slot 插槽完成⽤用户个性化定制需求
- 12.开发规范 组件库需要设计统⼀一的开发规范 ⽬目录设计 ⽬目录设计 代码编写 代码编写 ⽂文档和测试 ⽂文档和测试
- 13.开发规范-⽬目录设计 cube-ui ⽬目录结构
- 14.开发规范-代码编写 HTML 部分 • 使⽤用 .vue 单⽂文件开发组件,template 模板 • 尽量量使⽤用语义化标签
- 15.开发规范-代码编写 HTML 部分 • 遇到相同的结构考虑抽象 出组件
- 16.开发规范-代码编写 HTML 部分 Popup
- 17.开发规范-代码编写 HTML 部分 Picker ActionSheet
- 18.开发规范-代码编写 CSS 部分 • CSS 预处理理器器(stylus、less、sass)、autoprefixer • 定义全局变量量:颜⾊色、字体
- 19.开发规范-代码编写 CSS 部分 • 定义全局 Mixin 函数 • 组件样式使⽤用 scope 或者 BEM 命名规范
- 20.开发规范-代码编写 JS 部分 • ES2015、eslint • 避免魔术字符串串和魔术数字、⽤用常量量替代
- 21.开发规范-代码编写 JS 部分 • 组件遇到相同的逻辑可以抽象出 Mixin Dialog PopopMixin Picker
- 22.开发规范-代码编写 JS 部分 • ⽗父组件往⼦子孙组件注⼊入依赖可以考虑⽤用 provide/inject ScrollNav ScrollNav ScrollNavBar
- 23.开发规范-代码编写 JS 部分 • 尽量量避免写 hack 的代码, 如需要,⼀一定要写明注释 Slide
- 24.开发规范-⽂文档和测试 每个组件都要有详细的使 ⽤用⽂文档、以及示例例代码 ⽂文档和测试 需要提供组件库的安装、 需要有完整的单元测试、测 快速上⼿手等⽂文档 试覆盖率达到 90% 以上
- 25.模块依赖 组件库可以依赖⼀一些核⼼心模块作为辅助。 ⽬目录设计 vue-create-api 代码编写 better-scroll ⽂文档和测试 popper.js (移动端) (PC端)
- 26.模块依赖- vue-create-api • ⼀一个能够让 Vue 组件通过 API ⽅方式调⽤用的插件。 • 动态把组件挂载到 body 下。 • ⽀支持传⼊入响应式 props、events、插槽、单例例和多例例模式。 • 在普通 JS ⽂文件中也能调⽤用组件。
- 27.模块依赖- vue-create-api ⽀支持把任意组件变成 API 式的调⽤用
- 28.模块依赖- better-scroll • 重点解决移动端(⽀支持 PC 端)各种滚动场景需求的插件。 • 原⽣生 JS 实现,可配合任意 MVVM 框架使⽤用。 • ⽀支持丰富的配置。
- 29.模块依赖- better-scroll 普通滚动 下拉刷新 上拉加载
- 30.模块依赖- better-scroll Picker 索引列列表 滚动导航
- 31.模块依赖- better-scroll TabBar 开屏引导 轮播图
- 32.模块依赖- better-scroll 图⽚片预览 ⽆无限滚动
- 33.模块依赖- poper.js • 重点解决 PC 端弹出层类需求的插件。 • 它是⼀一个定位引擎,通过动态计算元素的位置,将其定位在给定的参考元素附近。 • 原⽣生 JS 实现,可配合任意 MVVM 框架使⽤用。
- 34.模块依赖- poper.js 选择器器 ⽂文字提示 (右边空间不不够)
- 35.模块依赖- poper.js ⽇日期选择 (下边空间不不够) 弹出框
- 36.⼯工程化 • npm scripts • 打包部署 • 单元测试 • ⽣生态建设
- 37.npm scripts 1 2 介绍 常⻅见场景
- 38.npm scripts- 介绍 npm 允许在package.json⽂文件⾥里里⾯面,使⽤用scripts字段定义脚本命令 命令⾏行行下使⽤用npm run命令,就可以执⾏行行这段脚本。 等同于执⾏行行
- 39.npm scripts- 常⻅见场景 cube-ui 的 npm scripts
- 40.npm scripts- 常⻅见场景 element-ui 的 npm scripts
- 41.单元测试 1 2 介绍 编写测试⽤用例例
- 42.单元测试-介绍 ⽤用于测试组件模块的⾏行行为是否能达到预期结果的代码 • 保证组件库库在后续的开发维护的稳定性 • 降低⼈人⼯工测试的成本
- 43.单元测试-介绍 • 测试⼯工具 karma • 测试框架 mocha • 断⾔言⼯工具 chai • 测试覆盖率
- 44.单元测试-编写测试脚本 describe 块称为“测试套件”(test suite),表示 ⼀一组相关的测试 it 块称为"测试⽤用例例"(test case), 表示⼀一个单独的测试,是测试的最⼩小单位 expect 表示断⾔言,判断源码的实际执⾏行行结果与 预期结果是否⼀一致,如果不不⼀一致就抛出⼀一个错 误。
- 45.打包部署 ⽬目录设计 ⼊入⼝口 JS 编写 代码编写 Webpack 构建配置 ⽂文档和测试 部署脚本
- 46.打包部署-⼊入⼝口 JS 编写 以 cube-ui 为例例
- 47.打包部署-⼊入⼝口 JS 编写 以 TimePicker 组件为例例
- 48.打包部署-webpack 构建配置 以 cube-ui 组件为例例
- 49.打包部署-编写构建脚本 cube-ui 的构建脚本
- 50.⽣生态建设 脚⼿手架 按需引⼊入 上⼿手教程 Q&A 后编译
- 51.⽣生态建设-脚⼿手架 脚⼿手架可以帮我们快速⽣生成项⽬目的初始化代码。 Vue 官⽅方提供了了 vue-cli 脚⼿手架帮助我们快速⽣生成 Vue 项⽬目 Vue-cli 3.0 提供了了插件化机制允许我们给初始化项⽬目注⼊入代码和配置 • vue-cli-plugin-element • vue-cli-plugin-cube-ui
- 52.⽣生态建设-脚⼿手架 • 添加组件引⼊入代码 • 新增 vue.config.js 扩展 webpack 配置 • 新增依赖插件并下载安装
- 53.⽣生态建设-上⼿手教程 帮助⽤用户快速学习和了了解组件库的使⽤用 • cube-application-guide
- 54.⽣生态建设-按需引⼊入 只引⼊入需要的组件,以达到减⼩小项⽬目体积的⽬目的 右边在左边显示完出现 借助 webpack-transform-modules-plugin 下⾯面要在上⾯面展示完显示
- 55.⽣生态建设-后编译 编译代码冗余? 依赖包本身不不编译,它的编译交给应⽤用来做。 通过修改 webpack 配置 rules 中的 include
- 56.⽣生态建设-后编译 后编译依赖嵌套? webpack-post-compile-plugin 需要后编译的依赖包在 package.json 中声明
- 57.⽣生态建设-后编译 • ⼀一份编译代码 • ⼀一份 ployfill • NPM包⽆无需编译发布 • 主题定制 • rem布局
- 58.⽣生态建设-Q&A 整理理常⻅见的问题问答
- 59.Q&A ?
- 60.Vue.js ⾼高仿开发 Vue 2.0实战⾼高级- Vue.js 源码 饿了了么APP 开发移动端⾳音乐 全⽅方位深⼊入解析 Web APP 完整流程 复杂应⽤用 ⾼高级进阶
- 61.THANK YOU ⻩黄轶