跟我一起编写Vue3版ElementUI

简介: 下面总结一下如何参加一个开源项目

一、提交PR的详细步骤


以下我把大体的步骤总结一下。


1. Fork代码


首先需要将vue代码通过github的fork功能复制一份到自己的github


github.com/kkbjs/eleme…


网络异常,图片无法展示
|


复制后的结果github.com/su37josephx…


2. clone到本地


git clone git@github.com:su37josephxia/element3.git


3. 安装依赖


# 设置国内镜像
yarn config set registry https://registry.npm.taobao.org
# --ignore-scripts  用于忽略chrome浏览器的下载
yarn install --ignore-scripts


4. 运行单元测试


# 强烈推荐大家全局安装
npm i jest -g 
npm run test:unit


网络异常,图片无法展示
|


5. 开发前同步官方最新代码


fork代码后,如果kkb主库有更新,需要手动拉去同步。 这个过程应该是每天都需要做的事情


5.1 添加新远程分支


这个只需要做一次


git remote add upstream git@github.com:kkbjs/element3.git


网络异常,图片无法展示
|


5.2 拉去合并远程分支到master分支


这个需要随时做 保持你的master分支永远是官方最新成果。


# 抓取源仓库修改 master分支
git fetch upstream master
# 切换分支
git checkout master
# 合并远程分支
git merge upstream/master


6.功能点开发


6.1 选择功能点


目前Element还在开发的初期 目前的任务抚平vue2余vue3的语法差异,顺便重构一下代码结构,换用VTU进行单元测试。具体要求下一章会具体讲。 所以这次就选择了一个比较简单的组件作为演示Card


6.2 从master分支创建修改分支


git checkout -b Card


6.3 开发代码


开发后的结果大概是这个样子


网络异常,图片无法展示
|


主要是重新编写了测试用例


import Card from '../Card.vue'
import { mount } from '@vue/test-utils'
describe('Card.vue', () => {
  describe('header', () => {
    it('text', () => {
      const wrapper = mount(Card, {
        props: {
          header: 'Header1'
        }
      })
      expect(wrapper.find('.el-card__header').text()).toBe('Header1')
    })
    it('slot', () => {
      const wrapper = mount(Card, {
        slots: {
          header: 'SoltHeader'
        }
      })
      expect(wrapper.find('.el-card__header').text()).toBe('SoltHeader')
    })
  })
  it('bodyStyle', () => {
    const wrapper = mount(Card, {
      props: {
        bodyStyle: { padding: '10px' }
      }
    })
    expect(wrapper.find('.el-card__body').attributes().style).toBe(
      'padding: 10px;'
    )
  })
  describe('shadow', () => {
    it('alwarys', () => {
      const wrapper = mount(Card, {
        props: {
          shadow: 'always'
        }
      })
      expect(wrapper.classes()).toContain('is-always-shadow')
    })
    it('hover', () => {
      const wrapper = mount(Card, {
        props: {
          shadow: 'hover'
        }
      })
      expect(wrapper.classes()).toContain('is-hover-shadow')
    })
    it('never', () => {
      const wrapper = mount(Card, {
        props: {
          shadow: 'never'
        }
      })
      expect(wrapper.classes()).toContain('is-never-shadow')
    })
  })
})


6.4 伺服运行单个测试用例


在开发的过程中推荐一直开着测试用TDD的方式进行开发


jest packages/card --watch


7. 提交commit


这里面涉及到一个问题就是必须要按照官方需要的格式提交commit msg。不然那会被hooks进行自动检查拒绝你commit。 规约在此github.com/conventiona…


git commit -am 'fix: update Card and test'


网络异常,图片无法展示
|


github.com/kkbjs/eleme…


8. 提出PR


划分开发分支


git checkout -b 'Card'


提交分支


git commit -am 'fix: update Card and test'


网络异常,图片无法展示
|


推送本地分支到github


git push --set-upstream origin Card


网络异常,图片无法展示
|


如何合并多余commit


另外如果涉及多次提交会有一个要处理合并多个commit的问题。


TODO 近期更新


提PR


网络异常,图片无法展示
|


网络异常,图片无法展示
|


9.坐等胜利的好消息


提交完成后就可以随时关注github.com/kkbjs/eleme…坐等好消息了


网络异常,图片无法展示
|


欢迎大家参加开源是世界 贡献你的力量。


二、如何选择入手


目前代码还处于比较初级的阶段。 可以考虑和我一样先选择一个比较简单的组件进行。 大概要干以下三个事情。


01 重构代码结构


旧的代码文件名和结构不是很统一。目前需要重构成新的文件名和文件结构


可以参考 /packages/button


网络异常,图片无法展示
|


02 更新单元测试代码


新的组件单元测试统一使用vue-test-utils-next框架 可以参考旧的用例编写。


vue-test-utils-next框架参考资料




网络异常,图片无法展示
|


03 更新API


测试过程中如果发现组件功能需要修改就需要改用vue3的api进行修改。


04 如何将组件加入Demo页面


由于更改vue3后以前旧的组件会编译失败。所以项目中使用白名单进行控制。


网络异常,图片无法展示
|


组件修改后需要将组件名加入build-entry.js的白名单中。 运行


npm run dev


浏览器中打开 http://0.0.0.0:8086


网络异常,图片无法展示
|

确认组件功能是否OK。


三、项目管理


如何使用看板 www.ruanyifeng.com/blog/2017/0…


四、参考资料


vue-test-utils-next框架参考资料




JEST基础


可以看一下这篇文章入个门。juejin.cn/post/684490…


覆盖率是什么


覆盖率 我们增加一个参数把覆盖率跑出来


npx jest --coverage


实际上跑覆盖率的时候是有错的 我们先不去管他 我们先解析一下这个报告怎么看,如果大家学过软件工程会知道一般从理论上讲覆盖率包括语句覆盖 节点覆盖 路径覆盖 条件组合覆盖 但是一般来讲不同框架理解不一样 在Jest这里大概是这样分解的


%stmts 是语句覆盖率(statement coverage) 是不是每个语句都执行了?
%Branch 分支覆盖率(branch coverage): 是不是每个if代码块都执行了?
%Funcs 函数覆盖率(function coverage): 是不是每个函数都调用了?
%Lines 行覆盖率(line coverage): 是不是每一行都执行了?


组件一览表位置


/components.json


组件依赖表


组件 子组件 引用组件 Inject组件
autocomplete-suggestions ElScrollbar
autocomplete ElInput
date-table elCalendar
calendar ElButton
ElButtonGroup
cascader-panel ElScrollbar panel
ElCheckbox
ElRadio
cascader ElTag
ElScrollbar
ElCascaderPanel
panel picker-dropdown ElInput
ElButton
time-spinner ElScrollbar
date-range ElInput
ElButton
date
month-range ElInput
ElButton
time-select ElScrollbar
picker ElInput
dropdown-menu dropdown
dropdown ElButton
ElButtonGroup
form-item elForm
label-wrap elForm
elFormItem
input-number input
menu menu-item-group rootMenu
menu-item ElTooltip
message-box ElInput
ElButton
popconfirm ElPopover
ElButton
select option select
select ElInput
ElTag
ElScrollbar
slider button ElTooltip
main ElInputNumber
table filter-panel ElCheckbox
ElCheckboxGroup
ElScrollbar
table ElCheckbox
tabs rootTabs
transfer ElButton
ElCheckboxGroup
ElCheckbox
tree ElInput
ElCheckbox
upload ElProgress uploader
ElProgress


相关文章
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable为了适配文件上传改造VForm3的代码记录
ruoyi-nbcio-plus基于vue3的flowable为了适配文件上传改造VForm3的代码记录
|
1天前
|
JavaScript 前端开发
vue2升级到vue3的一些使用注意事项记录(四)
vue2升级到vue3的一些使用注意事项记录(四)
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理
ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable多租户机制
ruoyi-nbcio-plus基于vue3的flowable多租户机制
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable的消息中心我的消息的升级修改
ruoyi-nbcio-plus基于vue3的flowable的消息中心我的消息的升级修改
|
1天前
|
JavaScript 前端开发
vue3中使用动态组件
vue3中使用动态组件
|
1天前
|
JavaScript 前端开发 容器
Vue 3 中 <transition-group> 组件报错的非 props 属性传递问题
Vue 3 中 <transition-group> 组件报错的非 props 属性传递问题
12 1
|
1天前
|
移动开发 JavaScript 前端开发
ruoyi-nbcio-plus基于vue3的flowable的自定义业务显示历史信息组件的升级修改
ruoyi-nbcio-plus基于vue3的flowable的自定义业务显示历史信息组件的升级修改
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable的支持自定义业务流程处理页面detail.vue的升级修改
ruoyi-nbcio-plus基于vue3的flowable的支持自定义业务流程处理页面detail.vue的升级修改
|
1天前
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable的自定义业务撤回申请组件的升级修改
ruoyi-nbcio-plus基于vue3的flowable的自定义业务撤回申请组件的升级修改