UNPKG

@elora-cloud/elora-cli

Version:
62 lines (59 loc) 2.15 kB
import { parse, join, dirname } from 'node:path'; import process from 'node:process'; import { filterPackagesFromDir } from '@pnpm/filter-workspace-packages'; import { findWorkspaceDir } from '@pnpm/find-workspace-dir'; import fse from 'fs-extra'; import { CWD } from './constant.mjs'; async function findGitRoot(startPath) { let currentPath = startPath; while (currentPath !== parse(currentPath).root) { if (await fse.pathExists(join(currentPath, '.git'))) { return currentPath; } currentPath = dirname(currentPath); } return null; } function isMonorepo() { return process.env.ELORA_CLI_IS_MONOREPO === 'monorepo'; } function getMonorepoDir() { return process.env.ELORA_CLI_IS_MONOREPO_DIR; } // 判断当前是不是一个monorepo的项目 async function isMonorepoProject() { const pnpmWorkspacePkgs = await findWorkspaceDir(CWD); // git的目录要和pnpm的目录一致 if (pnpmWorkspacePkgs && pnpmWorkspacePkgs === (await findGitRoot(CWD))) { process.env.ELORA_CLI_IS_MONOREPO = 'monorepo'; process.env.ELORA_CLI_IS_MONOREPO_DIR = pnpmWorkspacePkgs; } return !!pnpmWorkspacePkgs; } async function filterMonorepoPkg(filter) { if (isMonorepo()) { // 判断哪些是需要忽略的哪些是需要包含的 const pkgSelectors = []; if (filter) { pkgSelectors.push({ filter, followProdDepsOnly: true, }); } const { selectedProjectsGraph } = await filterPackagesFromDir(getMonorepoDir() || CWD, pkgSelectors, {}); // 转为数组 return Object.entries(selectedProjectsGraph).map(v => ({ dir: v[1].package.rootDir, name: v[1].package.manifest.name, version: v[1].package.manifest.version, })); } return false; } function setPublishRegistry(r) { process.env.ELORA_CLI_PUBLISH_REGISTRY = r; } function setPublishTag(t) { process.env.ELORA_CLI_PUBLISH_TAG = t; } export { filterMonorepoPkg, getMonorepoDir, isMonorepo, isMonorepoProject, setPublishRegistry, setPublishTag };