UNPKG

@tuzki/cli

Version:

🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️

78 lines (77 loc) 2.99 kB
/* * cli 版本相关工具方法 * * @Author: xu.jin * @Date: 2023-08-24 11:30:29 * * Copyright © 2014-2023 Rabbitpre.com. All Rights Reserved. */ import semver from 'semver'; import boxen from 'boxen'; import chalk from 'chalk'; import Logger from '@tuzki/scaffold-logger'; import shell from 'shelljs'; import config from './config.js'; const logger = Logger.get('cli:utils:version'); /** * Check node version * * @export * @param {string} pkgName package name * @param {string} wanted wanted version */ export function checkNodeVersion(pkgName, wanted) { if (!semver.satisfies(process.version, wanted, { includePrerelease: true })) { logger.warn(chalk.red(`You are using Node ${process.version}, but this version of ${pkgName} requires Node ${wanted}.`)); logger.warn(chalk.red('Please upgrade your Node version.')); process.exit(1); } } /** * 1.判断当前根据配置文件判断执行检查版本对应的 dist-tag; * 2.shell 执行 `tuzki -v` 获取本地cli版本; * 3.shell 执行 `npm dist-tags ls @tuzki/cli` 获取所有 dist-tag 对应的最新版本; * 4.通过对应配置 dist-tag 获取最新版本,与本地版本对比,提示更新; */ export function checkCliVersion(cmd) { const updateTag = config.cliCheckUpdateTag; const cmdNoNeedCheck = ['config', 'test', 'lint'].includes(cmd); if ((!updateTag && !cmdNoNeedCheck) || cmdNoNeedCheck) { if (!cmdNoNeedCheck) { logger.warn(chalk.yellow('You have closed the cli update check.')); } return; } logger.info(chalk.yellow('Cli 版本更新检查中,请稍候......')); // 获取本地 cli 版本 const versionStdout = getShellStdout('tuzki -v'); const curVersion = versionStdout[0]; // 获取 cli 所有 dist-tag 对应版本 const distTagsStdouts = getShellStdout('npm dist-tags ls @tuzki/cli'); const distTags = distTagsStdouts.reduce((acc, cur) => { const splitCur = cur.split(':'); if (splitCur.length > 1) { acc.push({ [splitCur[0]]: splitCur[1].trim() }); } return acc; }, []); // dist-tag 对应最新版本 const tagVersion = distTags.find(item => { return item[updateTag]; }); // 本地版本与 dist-tag 对应最新版本对比, 如果本地版本小于 dist-tag 对应最新版本,则提示更新 if (semver.lt(curVersion, tagVersion[updateTag])) { console.log(boxen(chalk.yellow(`A newer version of @tuzki/cli is available. Please update @tuzki/cli by running: ${chalk.magenta(`npm install -g @tuzki/cli@${tagVersion[updateTag]}`)}`), { padding: 1, margin: 1, borderStyle: 'round' })); } } /** * 转换 shell 执行命令后的 stdout 为数组 * @param cmd 命令 * @returns */ function getShellStdout(cmd) { const { stdout } = shell.exec(cmd, { silent: true }); const lines = stdout.split('\n'); return lines.filter(line => !!line).map(item => item.trim()); }