本文参加了SegmentFault思维写作挑战赛,欢迎正在阅读的你加入。作者:京东零售陈彦春前言:组件设计是通过对元素在功能和视觉表达上的拆解、归纳、重组,形成标准化的组件,并以可复用为目的,通过多维组合构建整个设计方案。这些组件被组织在一起,形成一个组件库。在本文中,我们主要讲述基于VantCLI的自建组件库。VantCLI是一个基于Vite的Vue组件库构建工具。通过VantCLI,你可以快速构建一个功能齐全的Vue组件库。建立组件库的意义首先在于组件库可以为我们降低成本,提高效率,其次能够保持统一的视觉风格和一致的交互,可以帮助我们快速搭建使用场景,方便后续的迭代升级多个项目。统一的视觉风格和一致的交互可以降低用户学习成本,培养用户习惯,使产品具有良好的用户体验。比如一个四级地址选择组件,在整个产品中应该有交互模式。如果一会儿是滚动选择,一会儿是点击选择,会让用户操作起来比较烦躁,统一的交互可以降低用户的学习成本。新产品上线后,需要不断完善,在迭代过程中可能会增加其他功能。这时候我们只需要修改组件库中的一组代码,不同项目的所有相同组件就可以达到迭代升级的效果。如何创建组件库1.整理组件列表先把项目中相同风格的模块整理出来,和产品一起讨论未来有什么规划,现有的组件是否能满足需求,是否需要补充设计方案。列表整理好后,每个A组件都构建成一个独立的任务,方便随时更新使用,就像日常需要一样。2.场景整合将自己变成产品的深度用户,完整体验现有线上产品,绘制用户行为路径,与需求方沟通了解后续计划,总结所有当前/潜在应用组件的场景,尽量不要遗漏场景。3、组件库框架的选择看了开源的Vue3组件库,总结了目前前端的一些流行趋势,列举了多个版本和框架。本文只讨论Vue3版本。1.element-plus-经典中的经典,全面支持Vue32.tdesign-vue-next-鹅厂优质UI组件,配套工具齐全,设计简洁,文档清晰3.arco-design-vue-字节跳动开源UI组件库,大厂逻辑,完善设计文档4.ant-design-vue-Ant前端UI库,面向企业级中后台5.naive-ui-宝藏VueUI库,VueUI之星,入门来自Vue36.vant-有赞团队开源移动端UI组件库,全面支持Vue37.nutui-京东出品,移动友好,面向电商业务场景8.vuetify-老VueUI,基于开发onGoogle'sMaterialDesignstyle9.varlet-Varlet是一个基于Vue3开发的Material风格移动端组件库,全面拥抱Vue3生态,由社区建立的组件库团队维护。4、组件库搭建我们以VantCLI为例详细分析一下具体的搭建过程:(1)首先确保本地节点版本^12.13.0||^14.15.0||>=16.0.0(2)执行以下命令快速创建基于VantCLI的项目yarncreatevant-cli-app(3)手动安装#vianpmnpmi@vant/cli-D#viayarnyarnadd@vant/cli-D#通过pnpmpnpm添加@vant/cli-D(4)手动配置{"scripts":{"dev":"vant-clidev","test":"vant-clitest","lint":"vant-clilint","build":"vant-clibuild","prepare":"huskyinstall","release":"vant-clirelease","build-site":"vant-clibuild-site"},"nano-staged":{"*.md":"prettier--write","*.{ts,tsx,js,vue,less,scss}":"prettier--write","*.{ts,tsx,js,vue}":"eslint--fix"},"eslintConfig":{"root":true,"extends":["@vant"]},"prettier":{"singleQuote":true},"browserslist":["Chrome>=51","iOS>=10"]}(5)在本地启动npmrundev启动项目,页面如下:注意:介绍,快速入门,自定义主题,编码规范,开发指南按照自己组的规范编写(6)如何开发组件库目录结构?仓库的组件代码位于src下,以及每个组件都有一个文件夹?docs目录是文档网站代码,本地开发时,可以在该目录下运行npmrundev打开文档。网站项目主目录如下:m-tetris├─build#Build├─docs#Documentation├─es#Package├─lib#Package├─site#StaticsiteResources├─src#Component├─test#单测└─static#为图片等资源添加新组件时,请按照以下目录结构组织文件,并在vant.config.js中配置组件名称。src└─button├─demo#示例代码├─test#单元测试├─index.vue#组件入口├─index.less#组件样式└─README.md#组件文档说明localtest#打包,生成libes文件文件夹npmrunbuild#生成压缩包npmpack#在项目中安装测试包npminstall压缩包的绝对路径(例如:/Users/用户名/work/XXX/XXX.0.tgz)5.如何发布到公司npm所有私服或者npm官网的公司内网用户都可以发布包到jnpm库。如果您之前没有发布包的经验,请先查看官方npm文档npmpublish。#拉取最新的master#构建npm包npmrunbuild#登录(如果已经登录请忽略)npmlogin#发布#如果是公司私服,请确保源是公司源npmpublish6.项目中如何使用组件方式1.按需自动引入组件(推荐)babel-plugin-import是一个babel插件,编译时会自动将import的写法转换为按需引入的方式过程。#安装插件npmibabel-plugin-import-D//在.babelrc中添加配置//注意:webpack1不需要设置libraryDirectory{"plugins":[["import",{"libraryName":"xxx-vant","libraryDirectory":"es","style":true}]]}//使用babel7的用户,可以在babel.config.js中配置module.exports={plugins:[['import',{libraryName:'xxx-vant',libraryDirectory:'es',style:true},'xxx-vant']]};//然后代码中直接引入xxx-vant组件即可//插件会自动转换方法2中的代码导入按需导入表单import{IndexBar}from'xxx-vant';方法二、按需手动导入组件无需使用插件,即可手动导入所需组件。从'xxx-vant/lib/index-bar'导入按钮;导入'xxx-vant/lib/index-bar/style';方法三、导入所有组件xxx-vant支持一次导入所有组件,导入所有组件会增加代码包的大小,所以不推荐这种方式。importVuefrom'vue';importJdxxxfrom'xxx-vant';import'xxx-vant/lib/index.css';Vue.use(Jdxxx);参考:vant-cli官网:https://github.com/游赞/范...
