UNPKG

@ygyg/yg-cli

Version:

A simple CLI for front-end engineering automation construction tool.

138 lines (122 loc) 5.63 kB
const axios = require('axios'); const semver = require('semver'); const chalk = require('chalk'); const utils = require('./utils'); const output = require('./output'); const packageConfig = require('../package.json'); const execa = require('execa'); // let arr = []; function f(obj, arr) { for (var i in obj) { if (typeof obj[i].dependencies === 'object') { f(obj[i].dependencies, arr); } else { arr.push(obj[i]); } } } const pkgRegistry = { local: 'http://registry.ygego.prod/nexus/repository/npm/', }; // registry="http://registry.ygego.prod/nexus/repository/npm/" const getPkgRemoteInfo = async (pkg) => { try { // 'https://registry.npmjs.org/@ygyg/yg-cli', const [err, pkgJsonData] = await utils.getPkgRegistry(`${pkgRegistry[pkg.registry]}${pkg.name}`); if (err) { output(`仓库中不存在此包 ${pkg.name}`); return null; } const latestVersion = pkgJsonData['dist-tags'].latest; const versions = Object.keys(pkgJsonData.versions).length; const license = pkgJsonData.license || 'Proprietary'; const deps = Object.keys(pkgJsonData.versions[latestVersion].dependencies || {}).length; // const localVersion = packageConfig.version; // @yg-cube/biz-layout@0.7.5 | Proprietary | deps: 10 | versions: 96 const pubtime = pkgJsonData.time[latestVersion]; // '0.7.5': '2022-01-07T06:52:38.850Z', // 远程已经获取完成 output('remote======================================================'); output(`${pkg.name}@${latestVersion} | ${chalk.green(license)} | deps: ${chalk.green(deps)} | versions: ${chalk.green(versions)} `); output(`最新描述: ${chalk.green(pkgJsonData.description)} ,发表日期: ${chalk.green(pubtime)}`); // output(`自身强依赖: ${chalk.green(JSON.stringify(pkgJsonData.versions[latestVersion].dependencies))}`); // output(`自身可选依赖: ${chalk.green(JSON.stringify(pkgJsonData.versions[latestVersion].peerDependencies))}`); return latestVersion; } catch (err) { console.error(err); return null; } }; const getPkgLocalInfo = async (pkg) => { // output(`local --${pkg.name}--------------------------------------------------`); // npm ls -json @yg-cube/biz-enterprice-identity // npm ls @yg-cube/biz-icon try { const stdout = execa.sync('npm', ['ls', '-json', pkg.name]).stdout; const jsonLocal = JSON.parse(stdout); const localDeps = Object.keys(jsonLocal.dependencies).length; if (localDeps > 1) { output(`存在多重依赖版本: ${chalk.red(localDeps)}`); const pkgDepsArr = []; f(jsonLocal.dependencies, pkgDepsArr); const versions = pkgDepsArr.reduce(function(pre, cur) { return pre.concat(cur.version); }, []); output(`工程依赖版本包括: ${chalk.yellow(JSON.stringify(versions))}`); return versions[0]; } const localVersion = jsonLocal.dependencies[pkg.name].version; // output(`工程依赖版本: ${chalk.green(localVersion)}`); return localVersion; } catch (err) { console.error(`npm ERR!!!请手工执行,便于检查. npm ls ${chalk.yellow(pkg.name)}`); return null; } }; module.exports = async (check) => { // Ensure minimum supported node version is used utils.logStep(process.version); utils.logStep(packageConfig.engines.node); const pkgList = [ {name: '@yg-cube/biz-layout', registry: 'local'}, {name: '@yg-cube/biz-enterprice-identity', registry: 'local'}, {name: '@yg-cube/biz-login', registry: 'local'}, {name: '@yg-cube/biz-enterprise', registry: 'local'}, {name: '@yg-cube/biz-icon', registry: 'local'}, {name: '@yg-cube/biz-tag', registry: 'local'}, {name: '@yg-cube/pro-card', registry: 'local'}, {name: '@yg-cube/pro-page-container', registry: 'local', need: true}, {name: '@yg-cube/pro-permission', registry: 'local'}, {name: '@yg-cube/biz-workgroup', registry: 'local'}, {name: '@yg-cube/biz-upload', registry: 'local'}, {name: '@yg-cube/biz-chosen-member', registry: 'local'}, {name: '@yg-cube/biz-decision', registry: 'local'}, {name: '@yg-cube/biz-chosen-parameter', registry: 'local'}, {name: '@yg-cube/biz-chosen-scen', registry: 'local'}, {name: '@yg-cube/biz-rules', registry: 'local'}, {name: '@yg-cube/biz-rulebase', registry: 'local'}, {name: '@yg-cube/biz-shortcut-scene', registry: 'local'}, {name: '@yg-cube/biz-notification-bar', registry: 'local'}, {name: '@yg-cube/hwf-copyright-wrap', registry: 'local'}, {name: '@yg-cube/hwf-friend-link', registry: 'local'}, {name: '@yg-cube/hwf-swiper-bulletin', registry: 'local'}, {name: '@yg-cube-mobile/bpm-homepage', registry: 'local'}, {name: '@yg-cube-mobile/bpm-login', registry: 'local'}, {name: '@yg-cube-mobile/bpm-messagecenter', registry: 'local'}, {name: '@yg-cube-mobile/bpm-mymessage', registry: 'local'}, {name: '@yg-cube-mobile/bpm-noticemessage', registry: 'local'}, {name: '@yg-cube-mobile/bpm-settings', registry: 'local'}, {name: '@yg-cube-mobile/bpm-workbench', registry: 'local'}, // "@ygfish/umi-preset-mobile5": "latest", // "@ygyg/rn-webview-bridge": "^0.0.6", // {name: '@ygyg/common-services', registry: 'local'}, ]; for (const pkg of pkgList) { const latestVersion = await getPkgRemoteInfo(pkg); const localVersion = await getPkgLocalInfo(pkg); if (latestVersion && localVersion && semver.lt(localVersion, latestVersion)) { output(chalk.yellow(` A newer version [${latestVersion}] of ${pkg.name} is available.`)); output(); } } };