使用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。

相关推荐
OEC小胖胖1 小时前
01|从 Monorepo 到发布产物:React 仓库全景与构建链路
前端·react.js·前端框架
kong79069281 小时前
Java基础-Lambda表达式、Java链式编程
java·开发语言·lambda表达式
2501_944711432 小时前
构建 React Todo 应用:组件通信与状态管理的最佳实践
前端·javascript·react.js
lixzest2 小时前
C++上位机软件开发入门深度学习
开发语言·c++·深度学习
困惑阿三2 小时前
2025 前端技术全景图:从“夯”到“拉”排行榜
前端·javascript·程序人生·react.js·vue·学习方法
苏瞳儿2 小时前
vue2与vue3的区别
前端·javascript·vue.js
于越海2 小时前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
代码方舟2 小时前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
wuk9982 小时前
基于MATLAB实现栅格地图全覆盖移动路径规划
开发语言·matlab
幽络源小助理3 小时前
PHP虚拟商品自动发卡系统源码 – 支持文章付费阅读与自动发货
开发语言·php