基于 vue3.0 从 0-1 搭建组件库(一)

简介: 基于 vue3 效仿 element-plus 从零实现组件库

初衷

其实之前使用 vue2 的时候就想写个开源组件库,学习交流使用。如果公司有自己的需求也可以快速上手。开始想的是能在网上找到好的教程,环境搭建 - 组件编写 - 单元测试 - 文档编写 - 打包发布,但是没有很完善的,慕课网有个 react 组件库的教程,storybook 编写文档的,vue3 的有个组件库教程是写配置表单的。实在网上找不到资料了,没办法就自己写嘛,没有困难制造困难也要上。网上也是找了一些资料指导,再配合开源的 element-pluselement3 组件库,想把自己的学习经验和大家分享下,不一定全对,也会有一些问题,主要是和大家一起学习,大家有什么好的意见我也会融合进来,对自己也是提升。

day-ui

目前就简单写了两个组件,样式没有自己写,使用的 element-plusscss 文件。内部逻辑都是参考一点点写的,更好的理解组建的实现和 vue3 的语法,因为我在公司英文名叫 day,就叫 day-ui 了。

npm(不知道为什么会有下载量😂,我的名难道误导别人了?)

github地址

文档github地址

文档在线访问

如果您感兴趣的话,欢迎给个 star 关注哈,后面计划把每个组件的实现原理都写出来,知其所以然。

环境搭建

我们直接使用 vue-cli 搭建项目框架,因为要用到 vue3 ,得先把 vue-cli 的版本升级到 vue-cli@4.5 以上。

npm install -g @vue/cli

创建新项目

vue create xxx




为什么使用dart-scss



按照提示可以启动项目,如果报依赖问题,可以删除 node_modules,重新安装

配置 prettier

在项目根目录创建 .prettierrc.json 文件

{
  "singleQuote": true, // 使用单引号
  "semi": false, // 不用分号
  "trailingComma": "none" // 最后一个元素不加逗号
}

我们打开 vscode 的设置,配置保存格式化。如果想 vscode 所有项目都有这个功能,可以选用户,我这里选择工作区,当前项目,不影响其他项目结构格式化


根目录会创建一个 .vscode/setting.json 文件,

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode" // 添加
}

如果发现有如下异常:


参考文章

环境搭建

  1. 我们不是做 vue 项目,可以把 src 目录删除,创建 examples 目录,用来测试写的组件;创建 packages 目录存放我们自己写的组件。

main.jsApp.vue 代码和之前 src 目录下的一致

  1. 根目录新建 vue.config.js 修改配置
const path = require('path')
const join = path.join

function resolve(dir) {
  return path.resolve(__dirname, dir)
}
module.exports = {
  pages: {
    index: {
      entry: 'examples/main.js', // 运行入口
      template: 'public/index.html',
      filename: 'index.html'
    }
  },
  configureWebpack: {
    resolve: {
      extensions: ['.js', '.vue', '.json'],
      alias: {
        packages: resolve('packages'),
        assets: resolve('examples/assets'),
        views: resolve('examples/views')
      }
    }
  },
  chainWebpack: (config) => {
    config.module.rule('js').include.add('/packages').end()
  }
}

npm run sreve 正常启动项目

  1. 引入全局样式文件

可以直接把 element-plus 的项目下载下来,样式文件放在 element-plus/packages/theme-chalk/src/ 目录下。在根目录创建 styles 目录,把样式文件拷贝进去。

因为我们组件库叫 day-ui,所以样式文件也是使用 d- 开头,修改 styles/mixins/config.scss

$namespace: 'd';
...

得到的目录结构如下:

- examples
   - example // 组件使用demo
      - button.vue
   - App.vue
   - main.js
- packages // 组件包源码
   - button
      - __tests__ 组件的单元测试
         - button.spec.js
      - src
         - index.vue
      - index.js // 单组件入口
   - index.js // 入口
- styles // 组件样式
- typings // 组件的类型

文档初始化

开始想使用 vitepress 搭建文档,在 GitHub 找到了现成的脚手架工具 vitepress-for-component地址, 大家也可以直接看官网快速上手

  1. 安装脚手架
yarn create vlib
  1. 安装依赖
npm i 或者 yarn

可能遇到以下问题

可能作者的开发平台不同,当然这个包对项目的启动,打包没有影响,所以我们可以忽略,在依赖中删除,在执行安装。

  1. 启动项目

  1. 使用 github 访问

github 上创建一个和文档项目名一致的仓库名,会有静态资源访问

把文档项目上传

仓库中找到 settings 菜单找到如下:

我们直接点击 choose a theme 选中随便一个主题,github 会自动创建 gh-pages 分支

配置网站

前面的换成你自己的名字,格式是 name.github.io/仓库名

点击网址成功打开

  1. 部署文档

打包npm run docs-build,生成的文件在 docs/dist

因为我们配置的访问 gh-pagesroot 根目录,所以把 dist 下的文件传到 gh-pages 分支即可。

切换分支 git checkout gh-pages。把 dist 下的内容都放到根目录下,创建 .gitingore 文件不用的写上,上传


NICE!!!

  1. 提供了两个文件目录,也可以打包后直接放到 docs 里面,直接访问,不用移动文件,build 打包的时候改下地址

目录
相关文章
|
1月前
|
Web App开发 JavaScript 数据可视化
vue3扩展echart封装为组件库-快速复用
vue3扩展echart封装为组件库-快速复用
138 7
vue3日历组件库Vue-Cel使用
vue3日历组件库Vue-Cel使用
|
2月前
|
JavaScript 前端开发 UED
组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
该文章详细介绍了如何使用Vue3结合TypeScript来开发全局Header组件和列表数据渲染组件ColumnList,并提供了从设计到实现的完整步骤指导。
|
3月前
|
设计模式 JavaScript 前端开发
Vue.js组件设计模式:构建可复用组件库
在Vue.js中,构建可复用组件库是提升代码质量和维护性的核心策略。采用单文件组件(SFC),定义props及默认值,利用自定义事件和插槽进行灵活通信,结合Vuex或Pinia的状态管理,以及高阶组件技术,可以增强组件的功能性和灵活性。通过合理的抽象封装、考虑组件的可配置性和扩展性,并辅以详尽的文档和充分的测试,能够打造出既高效又可靠的组件库。此外,采用懒加载、按需导入技术优化性能,制定设计系统和风格指南确保一致性,配合版本控制、CI/CD流程和代码审查机制,最终形成一个高品质、易维护且具有良好社区支持的组件库。
70 7
|
3月前
|
设计模式 JavaScript 前端开发
Vue.js 组件设计模式:在前端热潮中找到归属感,打造可复用组件库,开启高效开发之旅!
【8月更文挑战第22天】Vue.js 以其高效构建单页应用著称,更可通过精良的组件设计打造可复用组件库。组件应职责单一、边界清晰,如一个显示文本并触发事件的按钮组件,通过 props 传递标签文本,利用插槽增强灵活性,允许父组件注入动态内容。结合 CSS 预处理器管理和封装独立模块,配以详尽文档,有效提升开发效率及代码可维护性。合理设计模式下,组件库既灵活又强大,持续实践可优化项目工作流。
52 1
|
3月前
|
JavaScript 前端开发 开发者
摸鱼必备!!10个你不知道的 Vue 3 组件库...
摸鱼必备!!10个你不知道的 Vue 3 组件库...
|
3月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
192 0
|
4月前
|
JavaScript 开发工具 开发者
vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)
vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)
276 1
|
6月前
|
JavaScript 前端开发
Vue的高级表格组件库【vxe-table】
Vue的高级表格组件库【vxe-table】
221 0
|
6月前
|
JavaScript 前端开发 容器
Vue好看的组件库:Element
Element UI 提供了一套丰富的可复用组件,可以快速构建漂亮的网页界面和 Web 应用程序。它包含了常见的表单、表格、对话框、导航、菜单等组件,同时也提供了一些常用的工具函数和样式。Element UI 的设计风格简洁、美观,易于使用和定制,因此在 Vue.js 开发的项目中被广泛应用。
287 2
Vue好看的组件库:Element
下一篇
无影云桌面