使用pnpm workspace管理多个软件包

一、官方文档

pnpm 内置了对单一存储库(也称为多包存储库、多项目存储库或单体存储库)的支持, 你可以创建一个 workspace 以将多个项目合并到一个仓库中。

工作空间(Workspace) | pnpm

pnpm-workspace.yaml | pnpm中文文档 | pnpm中文网

二、pnpm-workspace环境搭建

2.1、创建目录BaseTemplete

2.2、初始化项目

javascript 复制代码
pnpm init

2.3、 删除package.json文件中的 main、test,并添加"private": true,

修改后

2.4、创建 pnpm-workspace.yaml 文件

javascript 复制代码
packages:
  # all packages in direct subdirs of packages/
  - 'packages/*'
  # all packages in subdirs of components/
  - 'common/**'
  # exclude packages that are inside test directories
  - '!**/test/**'

2.5、创建目录packages

2.6、进入packages创建项目

javascript 复制代码
cd .\packages\ 

// 创建主项目
pnpm create vite app-main --template vue  

// 创建图表项目
pnpm create vite app-chart--template vue  

创建完成后你想得到下图的目录结构

2.7、app-main、app-chart分别在vite.config.ts中设置不同的端口号

javascript 复制代码
server: {
    port: 5173
}

2.8、在整个项目根目录下(BaseTemplete)安装依赖

javascript 复制代码
pnpm i

2.9、根项目package.json配置

javascript 复制代码
"scripts": {
    "dev:main": "pnpm run -C packages/app-main dev",
    "dev:chart": "pnpm run -C packages/app-chart dev",
    "build:main": "pnpm run -C packages/app-chart build",
    "build:chart": "pnpm run -C packages/app-chart build"
  },

2.10、启动项目

javascript 复制代码
pnpm run dev:main

这样我们项目的基本功能就已完成。

三、主项目(app-main)中使用图表项目(app-chart)中的图表

3.1、分析需求

我们希望通过import { xxx }from 'app-chart'的方式在主项目中引入图表项目的图表,并且能够在图表项目中预览到我们开发的所有图表,那么就需要添加一个入口,该入口向外暴露图表项目中所有的图表。

3.2、安装依赖

项目中需要安装各种各样的第三方库,我们以unocss为例,为app-chart项目安装。(app-main项目同理)

javascript 复制代码
 pnpm i unocss --filter app-chart

配置vite.config.js

添加uno.config.js文件

javascript 复制代码
import { defineConfig, presetAttributify, presetUno, presetWind, presetTypography, transformerDirectives, transformerVariantGroup } from 'unocss';

export default defineConfig({
    presets: [presetAttributify(), presetUno(), presetTypography(), presetWind()],
    transformers: [transformerDirectives()],
    theme: {
        container: {
            center: true,
        }
    }
})

在main.js中引入

我们添加一个样式并运行app-chart项目看一下效果

效果图

3.3、制作图表

在components目录下创建demoComponent目录来编写图表组件,如下图

javascript 复制代码
<template lang="">
    <div class="bg-red-500">
        这是一个来自app-chart项目中的图表
    </div>
</template>
<script setup name='demoComponent'>

</script>
<style lang="">
    
</style>

这里我们制作了一个简易的组件,注意这里的name='demoComponent' 及我们最终引入组件是的组件名,下面我们编写index.js将其导出。

javascript 复制代码
import demoComponent from './src/demo.vue';

/* istanbul ignore next */
demoComponent.install = function(Vue) {
  Vue.component(demoComponent.__name, demoComponent);
};

export default demoComponent;

3.4、在app-chart项目中导出组件

首先在app-chart项目目录下创建index.js用于对外导出所有组件,这里将上面的组件进行导出。

然后修改package.json的入口文件

这样我们对app-chart项目的处理就完成了。

3.5、app-main项目中安装并使用

在app-main项目的package.json中添加依赖,并安装

在App.vue文件中使用app-chart项目中的组件

运行项目 pnpm run dev:main

这里我们就已经成功在app-main项目中使用app-chart项目中的组件了。同样在app-chart项目中也可以正常使用。

注:这里组件背景色差异是因为app-main项目中还未安装并配置unocss。

相关推荐
C澒4 分钟前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
Anastasiozzzz6 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步10 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
C澒11 分钟前
Remesh 框架详解:基于 CQRS 的前端领域驱动设计方案
前端·架构·前端框架·状态模式
Charlie_lll14 分钟前
学习Three.js–雪花
前端·three.js
机器视觉的发动机21 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经29 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
onebyte8bits31 分钟前
前端国际化(i18n)体系设计与工程化落地
前端·国际化·i18n·工程化
R_.L39 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
C澒39 分钟前
前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践
前端·架构·系统架构·前端框架