Vue3 企业级组件库框架搭建 pnpm monorepo实战示例

目录
  • 引言
  • 1 组件库工程应该具备的功能
  • 2 环境准备
  • 3 搭建 monorepo 项目
    • 3.1 创建项目
    • 3.2 配置 workspace

引言

基于 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 企业级组件库框架搭建 pnpm monorepo实战示例的详细内容,更多关于Vue3 组件库搭建pnpm monorepo的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android MonoRepo多仓和单仓的差别理论

    目录 前言 什么是Monorepo 什么是multi-repo multi-repo的问题 multi-repo的优点 MonoRepo的缺点 MonoRepo的优点 前言 今天不打算展开任何关于技术的探讨,只是想抛出一些观点,关于工程结构上的.可能有些人赞成也有些人反对,但是我觉得技术的世界还是需要一些讨论和探索的. 并没有指明那些就是最优解,可能都只是一些个人观点而已. 两种模式其实我都略微有点接触,当然文章也存粹是个人观点.我们先看下下面这幅图,其实就是一个原始工程结构,分仓结构,还有单仓

  • Vue3中使用pnpm搭建monorepo开发环境

    目录 前言 Pnpm 和 Monorepo 搭建开发环境 创建项目 配置 monorepo 安装依赖 初始化Typescript 准备两个模块 shared reactivity 编写构建脚本 完成第一次调试 小结 前言 Vue3 源码阅读系列,计划从环境搭建开始,将 Vue3 的响应式模块,运行时模块和编译器模块,以及状态库 Pinia.路由库 Vue-Router的核心原理做一个梳理.这大概是一个漫长的过程.祝自己不要烂尾,祝大家有所收获. Pnpm 和 Monorepo Pnpm 是新一代

  • JS前端架构pnpm构建Monorepo方式管理demo

    目录 写在前面 什么是Monorepo?什么是pnpm? 搞一个Monorepo的demo玩玩

  • Yarn与Lerna管理monorepo使用详解

    目录 什么是 Yarn workspace 如何使用 Yarn workspace Lerna 安装依赖的方式 Yarn workspace 与 Lerna 结合 结合的方式 角色的分配 好处 使用 什么是 Yarn workspace Yarn workspace 是 Yarn 提供的 monorepo 下,管理依赖的机制.对代码仓库下,多个 package 的依赖,进行管理:将共同的依赖,做 hosting(提升).这样,可以防止 package 中的包重复安装. workspace 机制,

  • 前端工程Monorepo项目管理方式

    目录 什么是 Monorepo? MultiRepo 之痛 1.代码复用 2.版本管理 3.项目基建 Monorepo 的收益 Monorepo 的落地 总结 随着前端工程日益复杂,某些业务或者工具库通常涉及到很多个仓库,那么时间一长,多个仓库开发弊端日益显露,由此出现了一种新的项目管理方式——Monorepo.本文主要以 Monorepo 的概念.MultiRepo的弊端.Monorepo 的收益以及Monorepo 的落地这几个角度来认识和学习一下 Monorepo,文末会有思考题,欢迎大家

  • Vue3.0中的monorepo管理模式的实现

    前言 前段时间9月21日参加了在成都举办的第五届FEDAY, 印象比较深刻的是白鹭引擎首席架构师@王泽分享的<框架开发中的基础设施搭建>,提到了在下一代白鹭引擎中使用到monorepo模式,以用来管理多个模块,协调各个模块之间的依赖更新. 正好在国庆期间10月5日尤大公开了vue3.0已完成的源码,也是采用了monorepo管理模式,看来monorepo确实有其独到的优势,再加上以前在项目中遇到过相关的痛点,所以深入地了解了一下这种模式,本文将基于vue3.0讨论如何通过monorepo模式来

  • vite前端构建Turborepo高性能monorepo方案

    目录 引言 什么是monorepo ? 引言 之前的一篇文章我选择了go做前端的cli工具链,现在出现了新的项目构建神器Turborepo用于Monorepo 方案. 什么是monorepo ? Monorepo是一种项目管理方式,在Monorepo之前,代码仓库管理方式是 MultiRepo,即每个项目都对应着一个单独的代码仓库每个项目进行分散管理 这就会导致许多弊端,例如可能每个项目的基建以及工具库都是差不多的,基础代码的重复复用问题等等... TurboRepo 是构建Javascript

  • Vue3 企业级组件库框架搭建 pnpm monorepo实战示例

    目录 引言 1 组件库工程应该具备的功能 2 环境准备 3 搭建 monorepo 项目 3.1 创建项目 3.2 配置 workspace 引言 基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli,但在中大型的企业级项目中,通常会自主搭建这些脚手架或加速器.优雅哥希望每位前端伙伴能知其所以然,故接下来的文章将进入 Vue3 企业级优雅实战 系列,整个系列将包括五大部分: 首先会分享如何从 0

  • Vue3组件库框架搭建example环境的详细教程

    目录 1 搭建 example 开发环境 1.1 创建 example 项目 1.2 修改 package.json 1.3 修改 vite 配置文件 1.4 多环境支持 1.5 测试启动服务 2 测试 foo 组件 2.1 安装依赖 2.2 引入组件库 2.3 使用组件 2.4 运行查看效果 3 example 打包构建 前面用了大量篇幅介绍组件库的开发环境搭建,包括:创建组件.创建组件库入口.组件库样式架构.组件库公共包,做了一大堆工作,还不能预览示例组件 foo,本文便搭建 example

  • vue3 vite异步组件及路由懒加载实战示例

    目录 引言 一.前言 1-1.三点变化: 1-2.引入辅助函数defineAsyncComponent的原因: 二.Vue 2.x与Vue 3.x定义比较 2-1.异步组件/路由定义比较 2-2.声明方式比较 2-3.异步组件加载函数返回比较 三.Vue3实践 3-1.路由懒加载实现 3-2.异步组件实现 四.总结 引言 在 Vue2 中,异步组件和路由懒加载处理使用 import 就可以很轻松实现.但是在Vue 3.x 中异步组件的使用与 Vue 2.x 完全不同了.本文就详细讲讲vue3中异

  • 如何使用Vue3.2+Vite2.7从0快速打造一个UI组件库

    目录 1. 前言 2. 使用Vite搭建官网 2.1 创建项目 2.1.1. 全局安装vite(这里我装的时候是2.7.2) 2.1.2. 构建一个vue模板(项目名可以改成自己的名字) 2.1.3. 装好之后按照提示逐步执行命令 2.2 基本完成官网的搭建 2.2.1. 下载vue-router 2.2.2. 创建home首页与doc文档页 以及顶部导航栏 2.2.3. 配置路由 3. 封装一个Button组件 4. 封装Markdown组件介绍文档 4.1. 下载 4.2. main.ts中

  • 对于组件库的思考及技术梳理详解

    目录 为什么要做? 组件库的技术选型 组件库的方向 组件库的设计 结语 为什么要做? 18年的时候觉得写ui组件库的人都好牛,出于好奇看了elementui.iview和Vant的源码.从那之后就萌生了自己也可以尝试搭个组件库试试,一是可以学习到很多知识,二是可以向牛人靠齐.可那时候又是个菜鸟,从0到1搭建对我来说是件很难的事情.当时借助从vue-cli创建的项目,做了修修改改,这样简单的组件库就出来了vvmui,现在回头看看那时候做的东西是真的菜... 近些年来,随着前端项目的复杂度越来越高,

  • Vue3从0搭建Monorepo项目组件库

    目录 引言 什么是 Monorepo 为什么要用 pnpm pnpm 的使用 安装 初始化项目 包管理 引言 本篇文章是从0搭建Vue3组件库系列文章第二篇,本篇文章将带领大家使用pnpm搭建一个简单的Monorepo项目,并完成包的关联与测试 什么是 Monorepo 其实很简单,就是一个代码库里包含很多的项目,而这些项目虽然是相关联的,但是在逻辑上是独立的,可以由不同人或者团队来维护 为什么要用 pnpm pnpm 对于包的管理是很方便的,尤其是对于一个 Monorepo 的项目.因为对于我

  • Vue3搭建组件库开发环境的示例详解

    目录 1 packages 目录 1.1 foo 目录 1.2 yyg-demo-ui 目录 2 实现 foo 示例组件 2.1 初始化 package.json 2.2 初始化 foo 目录结构 2.3 定义 foo 组件的 props 2.4 实现 foo 组件 2.5 定义 foo 组件入口文件 3 实现 yyg-demo-ui 3.1 初始化 package.json 3.2 安装依赖 3.3 定义入口文件 前文已经初始化了 workspace-root,从本文开始就需要依次搭建组件库.

  • Vue3从0搭建Vite打包组件库使用详解

    目录 打包配置 声明文件 打包配置 本篇文章将介绍如何使用 vite 打包我们的组件库,同时告诉大家如何使用插件让打包后的文件自动生成声明文件(*.d.ts) vite 专门提供了库模式的打包方式,配置其实非常简单,首先全局安装 vite 以及@vitejs/plugin-vue pnpm add vite @vitejs/plugin-vue -D -w 在 components 文件下新建vite.config.ts配置文件 import { defineConfig } from "vit

  • vue3使用Vite打包组件库从0搭建过程详解

    目录 手动搭建一个用于测试组件库组件 Vue3 项目 初始化 ts 搭建一个基于 vite 的 vue3 项目 安装插件 配置 vite.config.ts 新建入口 html 文件 app.vue 入口 main.ts 配置脚本启动项目 手动搭建一个用于测试组件库组件 Vue3 项目 本篇文章将在项目中引入 typescript,以及手动搭建一个用于测试组件库组件 Vue3 项目 因为我们是使用 Vite+Ts 开发的是 Vue3 组件库,所以我们需要安装 typescript.vue3,同时

  • 详解如何搭建mpvue框架搭配vant组件库的小程序项目

    1. vant 介绍 ### 扫码体验 Vant - 轻量.可靠的移动端 Vue 小程序 组件库.由 有赞 公司开发与维护.提供了一系列美观.优质的移动端组件.vant 官网 2. 在普通小程序怎么使用 vant 组件 使用之前 使用 Vant Weapp 前,请确保你已经学习过微信官方的小程序简易教程 和自定义组件介绍 安装 方式一. 通过 npm 安装 (推荐) 小程序已经支持使用 npm 安装第三方包,详见npm 支持 # npm npm i vant-weapp -S --product

随机推荐