Monorepo 检测指引
本文档介绍 isMonorepoProject 函数的用途、导入方式与判定规则,帮助你在 pnpm monorepo 项目中安全使用。
函数说明
isMonorepoProject(): boolean 用于判断当前工作目录是否是一个 pnpm monorepo 项目。判定逻辑:
process.cwd()下必须存在pnpm-workspace.yamlpnpm-workspace.yaml的packages字段需存在且为非空数组- 至少有一个
packages模式能匹配到package.json(忽略**/node_modules/**) - 当
pnpm-workspace.yaml解析失败时会抛出错误
导入路径(仅限 Node.js)
函数依赖 node:path、node:fs、tinyglobby 等 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 相关任务
- 在需要依赖包分布信息的工具中快速校验工程形态