【猿创征文】Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo

news/2024/5/21 1:02:40/文章来源:https://blog.csdn.net/youyacoder/article/details/127730200

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

image-20221103232852183

首先会分享如何从 0 开始搭建一套组件库基础工程,即如何从 0 实现 vue3-component-library-archetype

1 组件库工程应该具备的功能

在参考 Element PlusAnt DesignVan UIVue3 开源 UI 项目后,优雅哥认为一套企业组件库工程需要具备如下功能:

  1. 组件库的开发:这是最基础的,组件库工程必须要支持组件库的开发,在工程中开发各种组件;
  2. 组件库的构建:组件库开发完成后,不可能让所有使用该组件库的项目都使用源码的方式引入到各个项目中,而是要将其构建打包后发布到私服或 npm 上,各个项目通过依赖的方式引入使用。在这个过程中,就涉及类型定义的提取、不同模块化规范的打包等;
  3. 组件库的发布:上面提到组件库构建打包后需要发布到私服或 npm,那难道在组件库开发阶段就频繁的发布到私服上吗?这样做也没问题。不过优雅哥的建议是在本地启动一个迷你私服,当组件库开发到一个阶段(如 beta版本)可以提供给其他项目使用时,便可以按照常规流程发布到公司的私服或 npm 上。
  4. 组件库文档的编写和发布:通常会采用 MarkDown 来编写组件库的操作手册、每个组件的 API(props 组件的输入属性、events 组件提供的事件、methods 组件暴露的方法、slots 组件支持的插槽)、组件的使用说明、Demo 展示、Demo 对应的代码等。组件库文档中的 Demo 不仅给使用者参考,还可以使用它来调试组件。在文档编写完成后,需要将文档构建打包发布到 HTTP 服务上,供开发同事查看。
  5. 组件库开发工具 cli:每次新创建一个组件,都需要创建一套组件目录文件结构、注册该组件、在文档中添加该组件文档、Demo等操作,整个过程繁琐且没价值,而组件库可能会有几十个组件,所以很有必要开发一个 cli 用于快速创建组件,同时实现创建组件的规范化。
  6. 组件库 example 的开发和发布:这个是非必须的,在组件库中添加这个部分是基于两个方面考虑,其一是可以开发一个演示站点,用来展示组件库在项目中的实现效果;其二是在我的实践中,组件的开发通常由业务开发驱动,在开发 example 的过程中逐步完善组件库中的组件,当组件实现到一定的程度后,便可以将 example 抽取到独立的工程中。

2 环境准备

  1. Node JS 和 npm 版本:
node -v
npm -v

各位使用的版本最新大于等于我的版本。我本地的版本如下:

node:8.10.0
npm:7.14.0
  1. 安装或更新 pnpm
npm install -g pnpm

安装后查看版本:

pnpm -v

我本地 pnpm 版本号为 7.14.2

3 搭建 monorepo 项目

monorepo 单一代码库,是一种代码库的组织方式,与之对应的是 multirepos 多代码库。multirepos 通常是将不同的模块(packages)放在不同的代码仓库中,而 monorepo 是一个代码仓库中存放多个 packages。

在咱组件库基础工程项目中,包含了很多个包:多个组件的包、文档对应的包、cli 包、example 包,如果都在不同的代码仓库中维护,那则需要对应多个仓库,开发过程中需要在多个仓库间切换。此外,不同的仓库间的代码相互引用也比较麻烦。所以在组件库基础工程采用 monorepo 的方式来组织多个包。

实现 monorepo 有很多方式,LernaYarn Workspacepnpm Workspace 等,这里我选择 pnpm,使用 pnpm 后你会感觉到它的很多好处:速度、磁盘空间等。

关于 pnpm、monorepo 的理论知识,大家自己上网查询,优雅哥就不写那些无关痛痒的废话来凑数了。

3.1 创建项目

  1. 创建项目根目录

创建一个目录,作为组件库工程的根目录,目录名就使用你定义的组件库的名称,我命名为 yyg-demo-ui。用 IDE 打开该目录。

  1. 初始化 package.json

在命令行中进入该目录,使用 pnpm 初始化 package.json

pnpm init

执行完该命令后,会在项目根目录下自动生成 package.json 文件。在 package.json 文件中指定 type 属性为 module

{..."type": "module",...
}
  1. git 初始化:
git init
  1. 创建目录

在项目根目录下分别创建 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

  1. 在项目根目录下创建配置文件 pnpm-workspace.yaml
packages:- packages/*- cli- docs- example# exclude packages that are inside test directories- '!**/test/**'

上面的配置指定了 clidocsexample 本身是 package,packages 目录下的子目录也是 package。同时排除了所有的 test 目录。

  1. package.json 中指定 workspace
{..."workspaces": ["packages/*","cli","docs","example"]
}

到这一步就完成 pnpm + monorepo 的搭建了,项目根目录称为 workspace-root,下一步将初始化 workspace-root

感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,程序员优雅哥会持续与大家分享更多干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_223720.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础IO(下)——Linux

文章目录1. 理解文件系统1.2 背景知识1.2 inode vs 文件名1.3 软硬链接2. 动态库和静态库2.1 静态库.a2.1.1 如果想写一个库?(编写库的人的角度)2.1.2如果我把库给别人,别人怎么用呢?(使用库的人的角度&…

中医-通过舌象判断身体状况

本文分享通过舌象判断身体的整体状况(中医角度),得出一个可供辨证的参考,并且可以根据舌象做出相关的饮食调整,本文主讲理论,相关舌象图片易引人不适,如需找相关图片,可根据本文中的…

git rebase实战

例如, 在B分支上做rebase。 git rebase 之前确保当前分支是最新的。 切换到B分支: 1.git rebase origin/master(以origin/master分支为基线,合入master分支的修改到origin/master)此时会提示冲突文件 2.对冲突文件进行修改 3.git add 4.git …

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接,请求处理后连接立即关闭。 缺点:每个这样的连接,客户端与服务器都要分配TCP的缓冲区和变量,这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

上海亚商投顾:沪指录得6连阳 两市成交再度破万亿

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日横盘震荡,收盘集体小幅上扬,日K线均录得6连阳。虚拟现实概念股集体拉升&#…

最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架

前言 本文为 【Java日志框架】 相关知识,之前已经介绍了Java日志框架的发展历史:Java日志框架的发展历史。 这篇文章将对日志的概念与作用,JUL日志框架,Log4j日志框架,Logback日志框架,Log4j2日志框架&…

详谈一下:Java中的基本类型变量(8种)与引用类型变量的区别

对于Java语言中的基本类型,不知道各位老铁是否还能全能说出来!! Java语言中的8种基本类型: byteshortintlongfloatdoublecharbollen 上面8种Java语言中的基本类型,所对应的变量,就是基本类型变量&#xf…

【代码随想录】二刷-字符串

字符串 代码随想录如果想让这套题目有意义&#xff0c;就不要申请额外空间。 344.反转字符串 双指针 // 时间复杂度O(n),执行n/2次交换 // 空间复杂度O(1) class Solution { public:void reverseString(vector<char>& s) {int n s.size();for(int left 0,right n-…

浅谈CAD如何精准导入图新地球并应用在工程行业

摘要&#xff1a;本文以重庆九建某某高校施工项目前期准备和施工验证工作为依托&#xff0c;以图新地球精准导入CAD为研究对象&#xff0c;总结了一套相对成熟且完善的应用技术。该应用技术能在实际地形和现状数据中迅速找到施工点的大致位置&#xff0c;为前期工程勘测争取足够…

22下半年软考集成广东卷(中项)真题在线估分

22年下半年广东软考也已经落下帷幕了&#xff0c;整理的2022年下半年软考集成广东卷答案已经出炉&#xff01; 在线估分预测一下分数~ 大家锦鲤附身&#xff01;都能过&#xff01; 第5题 ”十四五"规划和2035远景目标纲要就打造&#xff08; &#xff09;新优势、加快&a…

5. 凸集和凸函数

凸集和凸函数1.仿射集2.凸集3.向量范数4.凸集的性质5.凸函数6.凸函数的一阶二阶条件7. 保凸运算8.凸函数和凸集的关系1.仿射集 2.凸集 仿射集 -------> 凸集 凸集 ----//----> 仿射集 3.向量范数 4.凸集的性质 5.凸函数 6.凸函数的一阶二阶条件 7. 保凸运算 凸函数的性…

海外拼多多Temu最新动态,怎么快速提升销量和权重?(测评补单)

上线一个多月后&#xff0c;拼多多跨境业务Temu的日均GMV突破了150万美元&#xff0c;入驻商家数量近3万个&#xff0c;SKU在30-40万&#xff0c;涵盖了24个一级类目。 据报道&#xff0c;目前Temu的日活成交用户在6万左右&#xff0c;下载用户接近80万&#xff0c;30天的复购…

vue3与vue2的不同内容

一、main.js入口文件的不同 // 引入的不再是构造函数&#xff0c;引入了一个名为creacteApp的工厂函数 import { createApp } from vue import ./style.css import App from ./App.vue // 创建应用示例对象--->app const app createApp(App) //把组件APP挂载到#app节点上 …

(最新版2022版)剑指offer之动态规划题解

&#xff08;最新版2022版&#xff09;剑指offer之动态规划题解[剑指 Offer 42. 连续子数组的最大和][剑指 Offer 47. 礼物的最大价值][剑指 Offer 46. 把数字翻译成字符串][剑指 Offer 48. 最长不含重复字符的子字符][剑指 Offer 48. 矩形覆盖][剑指 Offer 买卖股票的最好时机…

SpringSecurity Oauth2实战 - 06 拦截器获取用户登录信息并存储到本地线程ThreadLocal

文章目录1. 获取用户登录信息1. 用户信息共享的ThreadLocal类 UserInfoShareHolder2. 写一个拦截器 UserInfoInterceptor3. 配置拦截器 CommonWebMvcAutoConfiguration2. 源码分析1. 认证用户通过access_token访问受限资源2. 进入过滤器 OAuth2AuthenticationProcessingFilter#…

自动驾驶技术综述2:自动驾驶决策规划模块算法介绍

一、前言&#xff1a; 在自动驾驶整个软件框架中&#xff0c;决策规划模块有着重要的作用。决策规划模块一般也叫Planning模块&#xff0c;在整个自动驾驶系统中&#xff0c;Planning模块相当于人类驾驶员的大脑&#xff0c;它的上游是地图、导航、感知、预测这些模块&#xf…

Android Studio App开发中数据库SQLite的解析及实战使用(包括创建数据库,增删改查,记住密码等 附源码必看)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ SQLite简介 SQLite是一种小巧的嵌入式数据库&#xff0c;使用方便&#xff0c;开发简单&#xff0c;如同mysql&#xff0c;oracle那样&#xff0c;SQLite也采用SQL语句管理数据&#xff0c;由于它属于轻型数据库&#xff0…

Github已经54k个star的Docker,到底是什么?

做开发的应该很多人都知道Docker&#xff0c;就算是没有用过&#xff0c;应该也有所耳闻。这款开源于2013年的工具一经问世&#xff0c;便迅速火爆起来&#xff0c;在微服务、项目迁移、云等方面备受欢迎。如今它的github项目已经达到54k个star。Docker到底是什么&#xff1f;它…

零基础入门网络安全,收藏这篇不迷茫【2022最新】

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白了&#xff0c;网络安全就是指…

Golang源码分析:golang/sync之singleflight

文章目录1.背景1.1. 项目介绍1.2.使用方法2.源码分析2.1.项目结构2.2.数据结构2.3.API代码流程3.总结1.背景 1.1. 项目介绍 golang/sync库拓展了官方自带的sync库&#xff0c;提供了errgroup、semaphore、singleflight及syncmap四个包&#xff0c;本次分析singlefliht的源代码…