UNPKG

infra-cli

Version:
50 lines (38 loc) 1.6 kB
const fetch = require('./util/fetch') const spawn = require('cross-spawn') const chalk = require('chalk') const { shouldUseYarn } = require('./util/utils') const wrapLoading = require('./wrapLoading') const getRemoteVersion = async (packageName) => { const registryConfig = spawn.sync('npm', ['config', 'get', 'registry']) const registry = registryConfig.stdout.toString().trim() const url = `${registry.replace(/\/$/g, '')}/${packageName}` try { const metadata = await fetch.get(url) if (metadata.error) { throw new Error(metadata.error) } return metadata } catch (e) { console.error(chalk.redBright(`Failed to get response from ${url}`)) } } module.exports = async function upgrade (packageName, version) { const result = await wrapLoading(getRemoteVersion, chalk.greenBright('get latest version...'), packageName) if (result) { const distTags = result['dist-tags'] const latestVersion = distTags.latest if (latestVersion === version) { console.log(chalk.greenBright(`Already installed ${packageName}@${latestVersion}`)) return } console.log(`\npackage update from ${chalk.greenBright(version)} to ${chalk.greenBright(latestVersion)}\n`) const useYarn = shouldUseYarn() const command = useYarn ? 'yarn' : 'npm' const args = useYarn ? ['global', 'add', '--latest', packageName] : ['install', '-g', packageName] const upgradeProc = spawn.sync(command, args, { stdio: 'inherit' }) if (upgradeProc.status !== 0) { console.error(`upgrade ${chalk.redBright(packageName)} failed`) } } }