Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo
前两篇文章分享了基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli,但在中大型的企业级项目中,通常会自主搭建这些脚手架或加速器。优雅哥希望每位前端伙伴能知其所以然,故接下来的文章将进入 Vue3 企业级优雅实战 系列,整个系列将包括五大部分:

首先会分享如何从 0 开始搭建一套组件库基础工程,即如何从 0 实现 vue3-component-library-archetype。
1 组件库工程应该具备的功能
在参考 Element Plus、Ant Design、Van UI 等 Vue3 开源 UI 项目后,优雅哥认为一套企业组件库工程需要具备如下功能:
- 组件库的开发:这是最基础的,组件库工程必须要支持组件库的开发,在工程中开发各种组件;
- 组件库的构建:组件库开发完成后,不可能让所有使用该组件库的项目都使用源码的方式引入到各个项目中,而是要将其构建打包后发布到私服或 npm 上,各个项目通过依赖的方式引入使用。在这个过程中,就涉及类型定义的提取、不同模块化规范的打包等;
- 组件库的发布:上面提到组件库构建打包后需要发布到私服或 npm,那难道在组件库开发阶段就频繁的发布到私服上吗?这样做也没问题。不过优雅哥的建议是在本地启动一个迷你私服,当组件库开发到一个阶段(如 beta版本)可以提供给其他项目使用时,便可以按照常规流程发布到公司的私服或 npm 上。
- 组件库文档的编写和发布:通常会采用 MarkDown 来编写组件库的操作手册、每个组件的 API(props 组件的输入属性、events 组件提供的事件、methods 组件暴露的方法、slots 组件支持的插槽)、组件的使用说明、Demo 展示、Demo 对应的代码等。组件库文档中的 Demo 不仅给使用者参考,还可以使用它来调试组件。在文档编写完成后,需要将文档构建打包发布到 HTTP 服务上,供开发同事查看。
- 组件库开发工具 cli:每次新创建一个组件,都需要创建一套组件目录文件结构、注册该组件、在文档中添加该组件文档、Demo等操作,整个过程繁琐且没价值,而组件库可能会有几十个组件,所以很有必要开发一个 cli 用于快速创建组件,同时实现创建组件的规范化。
- 组件库 example 的开发和发布:这个是非必须的,在组件库中添加这个部分是基于两个方面考虑,其一是可以开发一个演示站点,用来展示组件库在项目中的实现效果;其二是在我的实践中,组件的开发通常由业务开发驱动,在开发 example 的过程中逐步完善组件库中的组件,当组件实现到一定的程度后,便可以将 example 抽取到独立的工程中。
2 环境准备
- Node JS 和 npm 版本:
node -v
npm -v
各位使用的版本最新大于等于我的版本。我本地的版本如下:
node:8.10.0
npm:7.14.0
- 安装或更新 pnpm:
npm install -g pnpm
安装后查看版本:
pnpm -v
我本地 pnpm 版本号为 7.14.2。
3 搭建 monorepo 项目
monorepo 单一代码库,是一种代码库的组织方式,与之对应的是 multirepos 多代码库。multirepos 通常是将不同的模块(packages)放在不同的代码仓库中,而 monorepo 是一个代码仓库中存放多个 packages。
在咱组件库基础工程项目中,包含了很多个包:多个组件的包、文档对应的包、cli 包、example 包,如果都在不同的代码仓库中维护,那则需要对应多个仓库,开发过程中需要在多个仓库间切换。此外,不同的仓库间的代码相互引用也比较麻烦。所以在组件库基础工程采用 monorepo 的方式来组织多个包。
实现 monorepo 有很多方式,Lerna、Yarn Workspace、pnpm Workspace 等,这里我选择 pnpm,使用 pnpm 后你会感觉到它的很多好处:速度、磁盘空间等。
关于 pnpm、monorepo 的理论知识,大家自己上网查询,优雅哥就不写那些无关痛痒的废话来凑数了。
3.1 创建项目
- 创建项目根目录
创建一个目录,作为组件库工程的根目录,目录名就使用你定义的组件库的名称,我命名为 yyg-demo-ui。用 IDE 打开该目录。
- 初始化 package.json
在命令行中进入该目录,使用 pnpm 初始化 package.json:
pnpm init
执行完该命令后,会在项目根目录下自动生成 package.json 文件。在 package.json 文件中指定 type 属性为 module:
{
...
"type": "module",
...
}
- git 初始化:
git init
- 创建目录
在项目根目录下分别创建 cli、docs、example、packages 四个目录,分别存放命令行工具、组件库文档、example、组件库四大模块,并在 packages 目录下创建 foo 和 yyg-demo-ui (yyg-admin-ui 需修改为你的组件库名)两个目录。
mkdir -p cli docs example packages/foo packages/yyg-demo-ui
目录结构如下:
yyg-demo-ui/
|- cli/
|- docs/
|- example/
|- packages/
|- foo/
|- yyg-demo-ui/
3.2 配置 workspace
前面创建了四个目录,需要告诉 pnpm 有哪些包,pnpm 提供了配置文件来配置 monorepo。
- 在项目根目录下创建配置文件 pnpm-workspace.yaml:
packages:
- packages/*
- cli
- docs
- example
# exclude packages that are inside test directories
- '!**/test/**'
上面的配置指定了 cli、docs、example 本身是 package,packages 目录下的子目录也是 package。同时排除了所有的 test 目录。
- 在 package.json 中指定 workspace:
{
...
"workspaces": [
"packages/*",
"cli",
"docs",
"example"
]
}
到这一步就完成 pnpm + monorepo 的搭建了,项目根目录称为 workspace-root,下一步将初始化 workspace-root。
感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,程序员优雅哥会持续与大家分享更多干货
Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo的更多相关文章
- Vue3 企业级优雅实战 - 组件库框架 - 3 搭建组件库开发环境
前文已经初始化了 workspace-root,从本文开始就需要依次搭建组件库.example.文档.cli.本文内容是搭建 组件库的开发环境. 1 packages 目录 前面在项目根目录下创建了 ...
- Vue3 企业级优雅实战 - 组件库框架 - 2 初始化 workspace-root
上文已经搭建了 pnpm + monorepo 的基础环境,本文对 workspace-root 进行初始化配置,包括:通用配置文件.公共依赖.ESLint. 1 通用配置文件 在项目 根目录 下添加 ...
- Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构
在前一篇文章中分享了搭建组件库的基本开发环境.创建了 foo 组件模块和组件库入口模块,本文分享组件库的样式架构设计. 1 常见的 CSS 架构模式 常见的 CSS 架构模式有很多:OOCSS.ACS ...
- Vue企业级优雅实战04-组件开发01-SVG图标组件
(后续的文章 公众号会提前一周更新,欢迎关注文末的微信公众号:程序员搞艺术) 预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy- ...
- Vue企业级优雅实战-00-开篇
从2018.1.开始参与了多个企业的中台建设,这些中台的技术选型几乎都是基于 Spring Cloud 微服务架构 + 基于 Vue 全家桶的前端.我前后端架构及开发我几乎各占一半的精力,在企业级前端 ...
- 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
相信大家在前端开发中都使用过很多前端脚手架,如vue-cli,create-vite,create-vue等:本篇文章将会为大家详细介绍这些前端脚手架是如何实现的,并且从零实现一个create-kit ...
- React 组件库框架搭建
前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...
- Vue企业级优雅实战05-框架开发01-登录界面
预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy-admin-single.git # github git clone git ...
- Vue企业级优雅实战03-准备工作04-全局设置
本文包括如下几个部分: 初始化环境变量文件 JS 配置文件初始化:如是否开启 Mock 数据.加载本地菜单.URL 请求路径等: 国际化文件初始化:初始化国际化文件的结构: 整合 Element UI ...
随机推荐
- 国家都给NISP证书的补贴了!关于NISP考试的政策有哪些?
NISP证书由中国信息安全测评中心依据中编办赋予"信息安全服务和信息安全专业人员的能力评估与资质审核"的职能而推出的证书,是中国信息安全测评中心代表国家实施的信息安全人员能力评定证 ...
- JAVA反序列化漏洞修复解决方法
MyObject类建立了Serializable模块,而且重新写过了readObject()变量,仅有建立了Serializable模块的类的目标才能够被实例化,沒有建立此模块的类将无法使他们的任意状 ...
- Python入门系列(十一)一篇搞定python操作MySQL数据库
开始 安装MySQL驱动 $ python -m pip install mysql-connector-python 测试MySQL连接器 import mysql.connector 测试MySQ ...
- 可靠的自托管「GitHub 热点速览 v.22.37」
自托管(Self-Hosted) 是很多开源项目主打的亮点:数据在手,安全我有.本周 GitHub 热点榜单上有多款自托管的项目,当中自然不能少了之前 HG 小伙伴 @makes world simp ...
- 上K8s生产环境的准备有哪些?
文章转载自:https://mp.weixin.qq.com/s/7FhiI09xKdJXJfrf89Q-8w 在生产中运行应用程序可能很棘手.这篇文章提出了一个自以为是的清单,用于在 Kuberne ...
- Kibana探索数据(Discover)
总结说明: 1.先在Management/Kibana/Index Patterns 界面下添加索引模式(前提是有索引数据) 2.在Discover界面选中响应的索引模式 3.开启Kibana 查询语 ...
- linux开机自启服务
前言:最近,有一个项目需要用到开机自动启动机房,所以就研究了一下 1.把node的快捷方式放在放在/usr/bin/(环境变量)下面,所有的命令默认是从这里面进行调用的 ln -s /home/too ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
- Java(15)Object类
前言 Object类是Java中所有类的始祖,在Java中每个类都扩展了Object.如果没有明确地指出超类,Object就被认为是这个类的超类.由于在Java中每个类都是由Object类扩展而来的, ...
- PHP全栈开发(八):CSS Ⅳ 文本格式及字体
文本系列属性主要是设置文本格式的,例如.... 颜色 body {color:red;} h1 {color:#00ff00;} p.ex {color:rgb(0,0,255); 可以设置文本的居中 ...