@elora-cloud/elora-cli
Version:
elora build cli 前端打包脚手架
74 lines (68 loc) • 2.74 kB
JavaScript
;
var path = require('node:path');
var process = require('node:process');
var filterWorkspacePackages = require('@pnpm/filter-workspace-packages');
var findWorkspaceDir = require('@pnpm/find-workspace-dir');
var fse = require('fs-extra');
var constant = require('./constant.cjs');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var process__default = /*#__PURE__*/_interopDefaultCompat(process);
var fse__default = /*#__PURE__*/_interopDefaultCompat(fse);
async function findGitRoot(startPath) {
let currentPath = startPath;
while (currentPath !== path.parse(currentPath).root) {
if (await fse__default.default.pathExists(path.join(currentPath, '.git'))) {
return currentPath;
}
currentPath = path.dirname(currentPath);
}
return null;
}
function isMonorepo() {
return process__default.default.env.ELORA_CLI_IS_MONOREPO === 'monorepo';
}
function getMonorepoDir() {
return process__default.default.env.ELORA_CLI_IS_MONOREPO_DIR;
}
// 判断当前是不是一个monorepo的项目
async function isMonorepoProject() {
const pnpmWorkspacePkgs = await findWorkspaceDir.findWorkspaceDir(constant.CWD);
// git的目录要和pnpm的目录一致
if (pnpmWorkspacePkgs && pnpmWorkspacePkgs === (await findGitRoot(constant.CWD))) {
process__default.default.env.ELORA_CLI_IS_MONOREPO = 'monorepo';
process__default.default.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 filterWorkspacePackages.filterPackagesFromDir(getMonorepoDir() || constant.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__default.default.env.ELORA_CLI_PUBLISH_REGISTRY = r;
}
function setPublishTag(t) {
process__default.default.env.ELORA_CLI_PUBLISH_TAG = t;
}
exports.filterMonorepoPkg = filterMonorepoPkg;
exports.getMonorepoDir = getMonorepoDir;
exports.isMonorepo = isMonorepo;
exports.isMonorepoProject = isMonorepoProject;
exports.setPublishRegistry = setPublishRegistry;
exports.setPublishTag = setPublishTag;