UNPKG

@vivo-minigame/cli

Version:

Command line interface for rapid Vivo minigame development

166 lines (120 loc) 4.73 kB
"use strict";var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");_Object$defineProperty(exports, "__esModule", { value: true });exports.updatePackage = exports.uninstallPackage = exports.progress = exports.installPackage = exports.installDeps = void 0;var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));var _events = _interopRequireDefault(require("events")); var _registries = _interopRequireDefault(require("./registries")); var _packageManager = require("./packageManager"); var _cliSharedUtils = require("@vivo-minigame/cli-shared-utils"); var _debug = _interopRequireDefault(require("debug")); const debug = (0, _debug.default)('minigame-cli:install'); const taobaoDistURL = 'https://npm.taobao.org/dist'; const supportPackageManagerList = ['npm', 'yarn', 'pnpm']; const packageManagerConfig = { npm: { installDeps: ['install', '--loglevel', 'error'], installPackage: ['install', '--loglevel', 'error'], uninstallPackage: ['uninstall', '--loglevel', 'error'], updatePackage: ['update', '--loglevel', 'error'] }, pnpm: { installDeps: ['install', '--loglevel', 'error', '--shamefully-flatten'], installPackage: ['install', '--loglevel', 'error'], uninstallPackage: ['uninstall', '--loglevel', 'error'], updatePackage: ['update', '--loglevel', 'error'] }, yarn: { installDeps: [], installPackage: ['add'], uninstallPackage: ['remove'], updatePackage: ['upgrade'] } }; class InstallProgress extends _events.default { constructor() { super(); this._progress = -1; } get progress() { return this._progress; } set progress(value) { this._progress = value; this.emit('progress', value); } get enabled() { return this._progress !== -1; } set enabled(value) { this.progress = value ? 0 : -1; } log(value) { this.emit('log', value); } } const progress = exports.progress = new InstallProgress(); function checkPackageManagerIsSupported(command) { if (supportPackageManagerList.indexOf(command) === -1) { throw new Error(`Unknown package manager: ${command}`); } } async function addRegistryToArgs(command, args) { const altRegistry = await (0, _packageManager.getRegistry)({ packageManager: command }); if (altRegistry) { args.push(`--registry=${altRegistry}`); if (altRegistry === _registries.default.taobao) { args.push(`--disturl=${taobaoDistURL}`); } } } function executeCommand(command, args, targetDir) { return new _promise.default((resolve, reject) => { progress.enabled = false; const child = (0, _cliSharedUtils.execa)(command, args, { cwd: targetDir, stdio: ['inherit', 'inherit', 'inherit'] }); child.on('close', (code) => { if (code !== 0) { reject(new Error(`command failed: ${command} ${args.join(' ')}`)); return; } resolve(); }); }); } const installDeps = exports.installDeps = async function installDeps(targetDir, command) { try { checkPackageManagerIsSupported(command); const args = packageManagerConfig[command].installDeps; await addRegistryToArgs(command, args); debug(`command: `, command); debug(`args: `, args); await executeCommand(command, args, targetDir); } catch (error) { } }; const installPackage = async function (targetDir, command, packageName, dev = true) { checkPackageManagerIsSupported(command); const args = packageManagerConfig[command].installPackage; if (dev) args.push('-D'); await addRegistryToArgs(command, args); args.push(packageName); debug(`command: `, command); debug(`args: `, args); await executeCommand(command, args, targetDir); };exports.installPackage = installPackage; const uninstallPackage = async function (targetDir, command, packageName) { checkPackageManagerIsSupported(command); const args = packageManagerConfig[command].uninstallPackage; await addRegistryToArgs(command, args); args.push(packageName); debug(`command: `, command); debug(`args: `, args); await executeCommand(command, args, targetDir); };exports.uninstallPackage = uninstallPackage; const updatePackage = async function (targetDir, command, packageName) { checkPackageManagerIsSupported(command); const args = packageManagerConfig[command].updatePackage; await addRegistryToArgs(command, args); packageName.split(' ').forEach((name) => args.push(name)); debug(`command: `, command); debug(`args: `, args); await executeCommand(command, args, targetDir); };exports.updatePackage = updatePackage;