pnpm 的 workspace 实现 monorepo 工程

前言

前端多个包管理的的方式一般都是采用monorepo的方式去管理,之前都是使用的lerna的workspace去管理。这段时间包管理切换到了pnpm上,它也有worksapce,可以支持monorepo

monorepo

有的小伙伴可能对monorepo不太了解,我们简单说下:

Monorepo的意思是在版本控制系统的单个代码库里包含了许多项目的代码。这些项目虽然有可能是相关的,但通常在逻辑上是独立的,并由不同的团队维护。

在前端使用角度来看,monorepo 就是把多个工程放到一个 git 仓库中进行管理,因此他们可以共享同一套构建流程、代码规范也可以做到统一,特别是如果存在模块间的相互引用的情况,查看代码、修改bug、调试等会更加方便。

pnpm+workspace

pnpm在这里我们就不过多介绍,有不了解的小伙伴,可以看下官网pnpm.

创建项目
  1. 建一个项目目录,创建好目录执行pnpm init,会在根目录生成一个packaeg.json文件。

在这里插入图片描述
2.创建 pnpm-workspace.yaml.npmrc文件

  • pnpm-workspace.yaml

    • 定义了 工作空间 的根目录,并能够使您从工作空间中包含 / 排除目录 。 默认情况下,包含所有子目录。即使使用了自定义目录位置通配符,根目录下的package目录也总是被包含.
  • .npmrc

    • pnpm 从命令行、环境变量和 .npmrc 文件中获取其配置。

    • pnpm config 命令可用于更新和编辑 用户和全局 .npmrc 文件的内容。

      四个相关文件分别为:

      • 每个项目的配置文件(/path/to/my/project/.npmrc
      • 每个工作区的配置文件(包含 pnpm-workspace.yaml 文件的目录)
      • 每位用户的配置文件( ~/.npmrc
      • 全局配置文件( /etc/npmrc

      所有 .npmrc 文件都遵循 INI-formatted 列表,包含 key = value 参数。

在这里,我们在.npmrc文件配置了,engine-strict=true 结合根目录的package.json中的 engines 字段,可以指定运行的 node 版和 pnpm 版

  1. 创建packages文件夹,进入目录创建我们子项目,
  • lowcode-platform 采用umi创建,感兴趣的可以自行去umi官网查看
  • ui-material 采用阿里的低代码物料脚手架创建,感兴趣的可以去看lowcode-engine
  1. 我们假设把ui-material项目作为基础库,让lowcode-platform去直接引用ui-material库,

    我们可以在根目录执行 pnpm add ui-material -r --filter lowcode-platform

    执行完成之后,我们就可以在lowcode-platform项目下直接引用改模块,不需要安装。这里我们用到了三个命令,分别是add,-r,--filter。具体详细内容可以参考官网。

5.接下来,我们可以在根目录下执行下pnpm i安装下依赖,配置下启动脚本

"clean-install": "pnpm clean && rm -rf ./{packages}/*/node_modules node_modules && pnpm i",
"dev": "pnpm -F \"lowcode-platform\" dev",
"build": "pnpm -F \"lowcode-platform\" build",
"dev:ui": "pnpm -F \"ui-material\" lowcode:dev",
"build:ui": "pnpm -F \"ui-material\" lowcode:build",

到这里就可以了,你可以配置自己比较方便快捷的命令。

结束语

代码已上传的github,如有需要,可自行下载查看

如果你觉得该文章不错,不妨

1、点赞,让更多的人也能看到这篇内容

2、关注我,让我们成为长期关系

3、关注公众号「前端有话说」,里面已有多篇原创文章,和开发工具,欢迎各位的关注,第一时间阅读我的文章

pnpm-workspace 是 pnpm 包管理器的一个功能,它允许你在一个项目中管理多个子包。了解了这一点后,我们可以根据引用内容来回答你的问题。 要启用 pnpmworkspace 功能,需要在工程根目录下创建一个名为 pnpm-workspace.yaml 的配置文件,并且在其中指定工作空间的目录。在你提供的示例中,这个文件内容如下:packages: - 'packages/*'。这表示你的项目的子包都放在名为 packages 的目录下。 在使用 pnpmworkspace 功能时,当你运行 pnpm publish 命令时,会自动将 package.json 中的 workspace 字段修正为对应的版本号。这样可以确保子包之间的依赖关系正确。 为了说明这一过程,让我们来看一下你提供的项目结构示例: /pnpm_workspace ├── package.json ├── packages │ ├── add-one │ │ ├── index.js │ │ ├── package.json │ │ └── test.test.js │ ├── add-two │ │ ├── index.js │ │ ├── package.json │ │ └── test.test.js │ └── adder │ ├── index.js │ └── package.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml 现在,让我们通过一系列步骤来构建这样一个项目: 1. 首先,创建一个名为 pnpm_workspace 的文件夹,并进入该文件夹。 2. 在该文件夹中运行 pnpm init -y 命令,以初始化根目录的项目。 3. 创建一个名为 pnpm-workspace.yaml 的文件,并在其中添加 packages: - 'packages/*' 的内容,以指定工作空间的目录。 4. 在 packages 目录下创建三个子包(add-one、add-two 和 adder),并分别初始化它们的 package.json 文件。 5. 在 adder 子包中,通过运行 pnpm add add-one --workspace 和 pnpm add add-two --workspace 命令,将 add-one 和 add-two 子包添加为 adder 的依赖。 通过以上步骤,你已经成功构建了一个具有 pnpmworkspace 功能的项目。 请注意,以上过程只是一个示例,你可以根据实际需要进行相应的调整和修改。希望这个回答对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值