当前位置: 首页 > news >正文

monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)

monorepo

  • 前言
    • 1、搭建空项目并配置pnpm-workspace.yaml
      • pnpm init
      • pnpm-workspace.yaml
    • 2.配置packages测试文件
      • 配置相关内容
    • 3.引入packages内容至公共package.json
    • 4.创建测试项目,并引入公共包
    • 结语

前言

有个项目要引入一个第三方库,但是第三方库下载下来的npm包不能满足完整需求。所以想用monorepo的方式来引入这个第三方库,并且可以修改第三方库的内容。基于此,学习了monorepo的相关基础知识,本文主要讲解monorepo如何从0到1搭建。

技术栈:npm、pnpm、vite

1、搭建空项目并配置pnpm-workspace.yaml

首先搭建一个空项目,也就是一个空文件夹,并且在vscode中打开这个文件夹,名称任意。
在这里插入图片描述
实现monorepo比较简单的方法就是用pnpm+workspace.yaml文件去实现,所以我们首先要初始化项目用pnpm,然后创建pnpm-workspace.yaml文件去配置我们monorepo具体地址。

pnpm init

在这里插入图片描述
初始化后,应该有一个package.json文件。这里需要加一行代码,"private":true,来设置私有化,防止被发布

pnpm-workspace.yaml

然后去手动添加一个文件,pnpm-workspace.yaml,并且在其中设置具体公共包与项目的地址,并且去创建对应的文件夹。在这里插入图片描述
如图所示,就是初始化,也就是第一步完成了。

2.配置packages测试文件

首先一般公共包都有一个css也就是ui库和一个配置util库,那么我们新建两个文件夹cssUI和util文件夹,并且用pnpm init分别给他们初始化,初始化后记得要加上"private:true.结果如下:
在这里插入图片描述
名字可能会重复,所以我在前面加上了@lp/utils等。

配置相关内容

写测试文件的目录如下
在这里插入图片描述
myUI.vue

<template><div>我有多少钱: {{ data }}<el-button type="primary" @click="addData">加一百</el-button></div>
</template>
<script setup lang="ts">
import "element-plus/dist/index.css";
import { ElButton } from "element-plus";
import  { addData, data } from '@lp/utils'
</script>

ui下的index.js

import myUI from './components/myUI.vue'export {myUI
}

ui下的package.json

{"name": "@lp/csss","version": "1.0.0","description": "","main": "index.js","private": true,"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {"element-plus": "^2.8.3","pnpm": "^9.10.0","vue": "^3.5.6"}
}

dataUtil.js

import { ref } from 'vue'export let data = ref(100)export const addData = () => {data.value = data.value + 100;
}

utils下的index.js

export { addData, data }  from './dataUtil' 

utils下的package.json

{"name": "@lp/utils","version": "1.0.0","description": "","main": "index.js","private": true,"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}

最后因为cssui文件夹下用到了element-plus,所以需要下载element-plus,

pnpm install vue element-plus

3.引入packages内容至公共package.json

引入上述写入的内容到package里面,两种方案,第一种

pnpm install -w @lp/utils @lp/csss

这时候,有可能网络延迟下载包失败,那就只能手动引入后install。

  "dependencies": {"@lp/utils":"workspace:^","@lp/csss":"workspace:^"}

在这里插入图片描述

然后 pnpm install
在这里插入图片描述

4.创建测试项目,并引入公共包

首先打开终端并跳到apps文件夹下。并通过pnpm create vite来设置一个vue项目,具体流程如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后根据流程来引入,并install

cd test 
pnpm install

最后把app.vue的内容修改并运行,

<script setup>
import { myUI } from '@lp/csss'
</script><template><div><myUI></myUI></div>
</template>

最后成功引入
在这里插入图片描述

结语

最终其实就是这样的效果,其中monorepo除了最简单的pnpm外,还可以使用turborepo实现,这里就不赘述了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 缺陷及缺陷管理(复习)
  • 企业微信应用消息收发实施记录
  • WPS生成目录
  • [PTA]7-3 选择法排序
  • 2024年最新软件测试面试题必问的1000题!
  • 希亦超声波清洗机值得购买吗?百元清洁技术之王,大揭秘!
  • flutter遇到问题及解决方案
  • PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
  • Android AlertDialog圆角背景不生效的问题
  • 漏洞挖掘 | Selenium Grid 中的 SSRF
  • dockerfile案例
  • js中的条件控制语句
  • MySQL从入门到精通
  • 【智路】智路OS Perception Camera Service
  • 中间件安全(二)
  • 【译】JS基础算法脚本:字符串结尾
  • 2017前端实习生面试总结
  • CEF与代理
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • es6要点
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript新鲜事·第5期
  • Java基本数据类型之Number
  • JS 面试题总结
  • Node + FFmpeg 实现Canvas动画导出视频
  • React as a UI Runtime(五、列表)
  • SpiderData 2019年2月25日 DApp数据排行榜
  • XForms - 更强大的Form
  • 猴子数据域名防封接口降低小说被封的风险
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 学习JavaScript数据结构与算法 — 树
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 找一份好的前端工作,起点很重要
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.2 T2 寻找道路
  • #php的pecl工具#
  • (~_~)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三)docker:Dockerfile构建容器运行jar包
  • (万字长文)Spring的核心知识尽揽其中
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)80c52学习之旅-起始篇
  • (转)Scala的“=”符号简介
  • .NET Core 版本不支持的问题
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net反编译的九款神器