Skip to content

Monorepo 检测指引

本文档介绍 isMonorepoProject 函数的用途、导入方式与判定规则,帮助你在 pnpm monorepo 项目中安全使用。

函数说明

isMonorepoProject(): boolean 用于判断当前工作目录是否是一个 pnpm monorepo 项目。判定逻辑:

  1. process.cwd() 下必须存在 pnpm-workspace.yaml
  2. pnpm-workspace.yamlpackages 字段需存在且为非空数组
  3. 至少有一个 packages 模式能匹配到 package.json(忽略 **/node_modules/**
  4. pnpm-workspace.yaml 解析失败时会抛出错误

导入路径(仅限 Node.js)

函数依赖 node:pathnode:fstinyglobby 等 Node.js API,不支持浏览器或前端打包入口。请从 Node 专用入口导入:

  • ESM 环境:@ruan-cat/utils/node-esm
  • CommonJS 环境:@ruan-cat/utils/node-cjs

⚠️ 禁止从主入口 @ruan-cat/utils 导入,否则会把 Node 依赖打进浏览器构建,导致如 "createRequire" is not exported by "__vite-browser-external" 等错误。

使用示例

Node.js ESM

typescript
import { isMonorepoProject } from "@ruan-cat/utils/node-esm";

if (isMonorepoProject()) {
	console.log("当前目录是 pnpm monorepo");
}

Node.js CommonJS

typescript
const { isMonorepoProject } = require("@ruan-cat/utils/node-cjs");

if (!isMonorepoProject()) {
	console.warn("当前目录不是 pnpm monorepo");
}

返回值

  • true:当前目录符合 monorepo 判定条件
  • false:未满足判定条件

异常行为

pnpm-workspace.yaml 解析失败时会抛出错误,例如 YAML 格式错误或内容无法解析。请先修复文件后再调用。

常见场景

  • CLI/脚本启动前验证是否在 monorepo 根目录
  • 在 CI 里根据判定结果决定是否执行 workspace 相关任务
  • 在需要依赖包分布信息的工具中快速校验工程形态

贡献者

The avatar of contributor named as ruan-cat ruan-cat

页面历史

最近更新