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

相关推荐
十里-16 小时前
vue.js 2前端开发的项目通过electron打包成exe
前端·vue.js·electron
u01092727116 小时前
C++中的策略模式变体
开发语言·c++·算法
雨季66617 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
雨季66617 小时前
Flutter 三端应用实战:OpenHarmony 简易倒序文本查看器开发指南
开发语言·javascript·flutter·ui
小北方城市网17 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
进击的小头17 小时前
行为型模式:策略模式的C语言实战指南
c语言·开发语言·策略模式
console.log('npc')17 小时前
vue2 使用高德接口查询天气
前端·vue.js
2401_8920005217 小时前
Flutter for OpenHarmony 猫咪管家App实战 - 添加支出实现
前端·javascript·flutter
天马379817 小时前
Canvas 倾斜矩形绘制波浪效果
开发语言·前端·javascript
天天向上102418 小时前
vue3 实现el-table 部分行不让勾选
前端·javascript·vue.js