news 2026/4/20 17:05:22

windows搭建Monorepo环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
windows搭建Monorepo环境

0.本文工具

  • NodeJS:24.13
  • pnpm
  • vscode

1.Monorepo 介绍

Monorepo(单一代码仓库)是一种项目管理方式,将多个相关的子项目(如前端应用、组件库、工具包)集中管理在同一个代码仓库中,而非每个项目单独建仓。

  • 核心优势:统一版本管理、跨项目依赖复用、代码共享更便捷、统一的构建 / 测试 / 发布流程。
  • pnpm 适配性:pnpm 原生支持 Monorepo(通过 workspace 机制),相比 npm/yarn更节省磁盘空间、安装速度更快,且能精准管理子项目间的依赖关系。

2.搭建过程

(1) 前置条件

我们按下win+R,输入cmd,打开cmd,先按照pnpm。

# 全局安装 pnpmnpminstall-gpnpm# 验证安装pnpm-v

(2)创建文件夹
我们假设在D盘中创建一个文件夹,名为monorepo ,然后使用vscode打开这个文件夹。


然后点击“终端”,点击“新建终端”

(3)初始化项目

在控制台中输入

pnpminit

来初始化项目

修改一个package.json,在里面增加 “private”: true, 这个是意思是:标记根项目为私有,禁止发布

{"name":"monorepo","private":"true","version":"1.0.0","description":"pnpm monorepo 示例","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","packageManager":"pnpm@10.32.1"}

(4)配置 pnpm workspace

pnpm workspace 是 pnpm 内置的 Monorepo(单体仓库) 管理功能,用于在单一代码仓库中高效管理多个相互关联的项目 / 包。
核心概念:
Monorepo:将多个项目(如应用、组件库、工具库)放在同一个 Git 仓库,而非分散管理。
Workspace:pnpm 通过根目录的 pnpm-workspace.yaml 文件,定义哪些目录属于工作区,实现统一管理。

这里选择“新建文件”,文件名为pnpm-workspace.yaml

参考代码如下:

# pnpm-workspace.yamlpackages:# 所有放在 packages 目录下的子项目-'packages/*'# 可选:单独指定前端应用目录(如 apps 下的项目)-'apps/*'# 排除不需要的目录(可选)-'!**/node_modules'-'!**/dist'


说明:packages/* 表示 packages 目录下的每个子文件夹都是一个独立子项目;可根据需求自定义目录(如 apps/ 放应用,packages/ 放公共包)。

然后创建子项目文件夹。
点击创建第一级文件夹,packages和apps

创建完后界面如下,然后分别在packages文件夹创建utils文件夹
在app文件夹下创建web文件夹。

创建完后如下所示
注意,只有一级文件夹,没显示折叠效果。

(5)初始化项目
创建完了以后,开始初始化项目。
先初始化packages/utils,在控制台中输入下面的指令

cdpackages/utilspnpminit

然后修改name (设置唯一的 name,方便其他子项目引用):)

{"name":"@my-monorepo/utils","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","packageManager":"pnpm@10.32.1"}

然后创建utils的入口文件,index.js

参考代码如下:

// 示例:提供一个格式化时间的工具函数exports.formatTime=(date)=>{returnnewDate(date).toLocaleString();};

再初始化 apps/web

在控制台中输入

cd../../apps/webpnpminit

注意,因为根据上面的顺序,我们处的目录,所以需要退两次, cd…/…/ 回到根目录

修改name 为@my-monorepo/web, 然后增加一行代码"private": true, 表示不发布

{"name":"@my-monorepo/web","version":"1.0.0","private":true,"description":"","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","packageManager":"pnpm@10.32.1"}


然后给 web模块增加入口文件,index.js
右击web,选择”新建文件“,文件名是 index.js


里面的代码如下:

// 引用同仓库的 utils 包const{formatTime}=require('@my-monorepo/utils');console.log('当前时间:',formatTime(newDate()));


(6)安装子项目间的依赖(核心:workspace 协议)

在根目录执行命令,为 apps/web 安装 @my-monorepo/utils 依赖(使用 pnpm 的 workspace 协议,关联本地子项目):

# 回到根目录cd../../# 格式:pnpm add <子项目名> -F <目标子项目>pnpmadd@my-monorepo/utils@workspace:*-F@my-monorepo/web

说明:-F(–filter)是 pnpm 的过滤指令,指定为哪个子项目安装依赖;

注意上面的写法,这是 pnpm 强制指定用本地工作区包的语法,不会去 npm 公网查找。
如果你写成

pnpmadd@my-monorepo/utils-F@my-monorepo/web

它会优先去npm仓库去找相关的包,关键是这个包真的有。。。 所以这里强制指定本地目录。
安装后,apps/web/package.json 会自动添加依赖:

3.运行

在项目的根目录执行

nodeapps/web/index.js

可以看到,正输出结果。

本文源代码下载:
monorepo.zip链接:
https://pan.baidu.com/s/1DsjfZDPkwqY2hbLj8-3Xww?pwd=7ftv

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 16:59:32

MAA明日方舟助手:免费开源的终极自动化游戏助手指南

MAA明日方舟助手&#xff1a;免费开源的终极自动化游戏助手指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitco…

作者头像 李华
网站建设 2026/4/20 16:58:46

如何用5分钟彻底告别网盘限速:八大平台直链下载助手完整教程

如何用5分钟彻底告别网盘限速&#xff1a;八大平台直链下载助手完整教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 …

作者头像 李华
网站建设 2026/4/20 16:57:16

从.NET 6到.NET 9:C# 14原生AOT如何让Dify客户端通过工信部信创适配认证?含麒麟V10+飞腾D2000+达梦V8全栈兼容清单(仅限首批200家ISV申领)

第一章&#xff1a;C# 14原生AOT部署Dify客户端的企业级适配战略全景C# 14 原生 AOT&#xff08;Ahead-of-Time&#xff09;编译能力与 Dify 开源 LLM 应用平台的深度集成&#xff0c;正成为企业构建轻量、安全、可审计 AI 客户端的关键路径。区别于传统 JIT 部署模式&#xff…

作者头像 李华
网站建设 2026/4/20 16:57:14

PCIe SR-IOV与虚拟化:单根I/O虚拟化深度解析

摘要:SR-IOV(Single Root I/O Virtualization)是PCIe规范定义的硬件级虚拟化技术,允许单个物理设备(PF)虚拟出多个虚拟功能(VF),每个VF可独立分配给不同虚拟机。本文从SR-IOV架构出发,详解PF/VF的关系、VF的资源分配机制、Migration与Live Migration的实现挑战,以及…

作者头像 李华