造轮子之dying-ui组件库|项目复盘

简介: 之前组件封装接触也只是在项目中所需,才会去封装组件。起初自己产生这个想法,就知道从无到有一定很困难。在b站上搜资源,确实又类似的,但只是按钮的基本教程。之后,各种翻资料,举一反三,尤其是在项目持续部署GitHub时,直接卡住了。为了完成这个项目,不得不说,是深刻体会到了无助、却又无奈的压力。

一、项目简介:


项目描述: 实现类似于 Element-UI 的组件库,进一步掌握组件封装。

项目内容: 完成按钮、图标、布局、轮播图、表格等组件基本功能的封装;并完成部分组件测试;完成 dying-ui 组件库 npm 版本发布;使用 VuePress 编写组件库页面,已完成按钮组件;实现 GitHub 与 Netlify 可持续化部署。


二、项目背景:


之前组件封装接触也只是在项目中所需,才会去封装组件。起初自己产生这个想法,就知道从无到有一定很困难。在b站上搜资源,确实又类似的,但只是按钮的基本教程。之后,各种翻资料,举一反三,尤其是在项目持续部署GitHub时,直接卡住了。为了完成这个项目,不得不说,是深刻体会到了无助、却又无奈的压力。


目的:此次的目的是因为我回顾这几年,简历上除了几个获奖的项目,并没有真正开源的项目。写组件库也是为了我的简历上有一个亮点,想在下一次面试的时候,可以说自己研究过组件源码,自己可以独立完成组件库的封装、发版、部署。仅此而已。


三、实践过程:


运用技术



Vue-cli3、TypeScript、SCSS、chai、mocha、karma、VuePress


经历过程


网站展示


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

上图是通过vuepress自动生成的组件库文档页面,风格基本沿用vuepress默认样式。主要是实现文档的导航、组件样例页面配置。


dying-ui组件库


之前看的element-ui源码,仿照此框架,实现组件的组件库。与此不同的是我采用的是ts而不是js。组件库与element相似。


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


组件开发


使用vue-cli3初始化项目,修改文件夹,基本目录如下:


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


在src的packages内编写各个所需的组件,如何编写可以查看之前发布的文章:dy-ui组件库之一个进度条


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


npm发布


dy-ui组件库之一个进度条这篇文章关于发布只说了关于打包入口文件的部分。

我们设置好入口文件,需要在package.json配置相关属性。设置一下组件的名称(name)、版本(version)、权限(private)。

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


配置好相关项后,注册登录npm,在项目中登录自己的npm账号,再发布。


npm login 输入账号、密码、邮箱
npm publish


发布成功后,npm会推送发布成功的信息到发布者绑定的邮箱中。此时就可以在npm官网可以看到自己的项目。


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


dying-ui文档


利用VuePress先初始化文档项目,根据其配置,必须要严格遵守目录结构。 在配置组件时,主要在config.js文件中配置导航与侧边栏。


themeConfig: {   // 主题配置
        // repo: 'vuejs/vuepress',
        docsDir: 'docs',
        // extend: '@vuepress/theme-default',
        search: false,
        searchMaxSuggestions: 10,
        logo: '/logo.png',
        smoothScroll: true,
        nav: [
            {
                text: '主页',
                link: '/'
            },
            {
                text: '指南',
                link: '/zh/guide/',   // 导航条
            },
            {
                text: '组件',
                link: '/zh/components/',
            },
            { text: 'GitHub', link: 'https://github.com/ClyingDeng/Dy-UI' },
        ],
        // 为以下路由添加侧边栏
        sidebar: {
            '/zh/components/': getComponentSidebar('组件'),
            '/zh/guide/': getGuideSidebar('开发指南', '设计原则'),
        }
    },
}


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


路径属于相对路径,/默认是docs文件夹下的README.md(必须使用大写的README)。类推,/zh/components/表示zh文件夹下components文件夹下的README.md文件。 在配置侧边栏时,如果是同一级小目录可以使用getComponentSidebarf方法,多级可以使用getGuideSidebar方法。


function getGuideSidebar(groupA, groupB) {
    return [
        {
            title: groupA,
            collapsable: false,
            children: [
                '',
                'quickstart',
            ]
        },
        {
            title: groupB,
            collapsable: false,
            children: [
                'guide-design',
            ]
        }
    ]
}
function getComponentSidebar(groupA) {
    return [
        {
            title: groupA,
            collapsable: false,
            children: [
                '',
                'container',
                'button',
                'icon',
                'progress',
                'upload',
                'popover',
                'datePicker',
                'carousel',
                'table',
                'pagination',
                'infiniteScroll'
            ]
        }
    ]
}


结合上面两个代码块,可以看出相对应的页面,以sidebar的路径(如/zh/components/)为相对路径,如:quickstart 这个文件对应的就是/zh/components/quickstart。


网络异常,图片无法展示
|
编辑好路径,页面内容后,就是部署项目。可以点击我的 dy-ui组件库之页面部署查看如何持续部署。


技术困难


1、ts组件注册,无法识别组件名。解决方法:可以通过创建静态变量,在index.ts中使用该静态变量,注册组件。

import DyButton from './button/button/Button.vue';
...
let components = [
  DyButton,
  ...
  DyTable
];
// console.log(infiniteScroll, infiniteScroll.comName);
const install = (Vue: any) => {
  components.forEach((_: any) => {
    Vue.component(_.comName, _);
  });
复制代码

2、 初学vuepress,根本不了解目录结构的构成,以及如何设置导航栏侧边栏。解决方法就是去GitHub上找到vuepress项目,看看它里面的config是怎么配置的,可以扒一扒。

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

四、总结思考:


收获


  • 在添加样式时,可以绑定计算属性。根据变量的变化而添加不同的样式。
  • 使用全局scss变量,减少import导入操作,便于统一更改变量。
  • 学习组件封装思想,根据所需传参,完成参数在组件中的功能。


成长总结


  • 多结交一些志同道合的朋友,一起学习也好、一起谈笑也罢。
  • 遇到困难,即使几天都无法产生进度,也要坚持不懈,多问多搜,坚信没有解决不了的问题。
  • 即使自己花了很久才完成的项目,使用人数很少,也不能气馁,毕竟山外有人,只有自己一直坚持,才能达到想要的高度。


组件库预览地址:clyingdeng.github.io/dy-ui-doc

组件库源码地址:github.com/ClyingDeng/…

组件库文档源码地址:github.com/ClyingDeng/…


作者:ClyingDeng

链接:https://juejin.cn/post/6940235031529193508

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 前端开发
机器学习PAI常见问题之web ui 项目启动后页面打不开如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
4月前
uniapp项目实践第四章:如何安装uni-ui组件库
uniapp项目实践第四章:如何安装uni-ui组件库
335 0
|
4月前
|
存储 安全 测试技术
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
|
1月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
38 0
|
20天前
|
开发者 Android开发 UED
打造流畅应用:深入探索如何在Xamarin项目中选择并实现最佳UI/UX设计的实践指南
【8月更文挑战第31天】在数字化时代,UI/UX设计成为应用成功的关键。Xamarin以高效开发和强大兼容性著称,其设计理念“一次编写,处处运行”需充分适应多平台特性,提供一致体验。选择Xamarin.Forms或结合Xamarin.Native可实现跨平台UI设计;遵循各平台设计指南,保持布局一致性和简洁性;通过用户测试不断优化。最终,结合技术和用户需求,打造美观实用的应用,脱颖而出。
27 0
|
2月前
|
前端开发 JavaScript
零基础学 Vue + Element UI 第01步 —— 搭建开发环境、创建项目、修改默认模板、启动项目、访问项目
零基础学 Vue + Element UI 第01步 —— 搭建开发环境、创建项目、修改默认模板、启动项目、访问项目
45 1
|
3月前
|
缓存 JavaScript 测试技术
如何创建一个VUE3项目并使用Element UI插件
如何创建一个VUE3项目并使用Element UI插件
|
2月前
|
JavaScript
vue项目中升级element ui(含常见报错及解决方案,如表格不显示,el-table无效, “__v_isRef“ is not defined,Use :deep() instead)
vue项目中升级element ui(含常见报错及解决方案,如表格不显示,el-table无效, “__v_isRef“ is not defined,Use :deep() instead)
43 0
|
2月前
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
231 0
|
4月前
|
XML JSON 开发框架
基于 OData 模型和 JSON 模型的 UI5 表格控件行项目的添加和删除实现
基于 OData 模型和 JSON 模型的 UI5 表格控件行项目的添加和删除实现