CLI 常用
inquirer
常用的命令行交互界面集合(package inquirer)。通过命令行的方式来进行书写。
const inquirer = require('inquirer')const chalk = require('chalk')inquirer.prompt([/* Pass your questions in here */{type: 'input',name: 'name',message: '请输入你的姓名'},{type: 'list',name: 'sex',message: '请选择你的性别',choices: ['男', '女']}]).then(answers => {// Use user feedback for... whatever!!const { name, sex } = answers}).catch(error => {if(error.isTtyError) {// Prompt couldn't be rendered in the current environment} else {// Something else went wrong}});
chalk
为终端的文字添加样式(package chalk)。
const chalk = require('chalk')const log = console.log// ES2015 template literallog(`CPU: ${chalk.red('90%')}RAM: ${chalk.green('40%')}DISK: ${chalk.yellow('70%')}`);// ES2015 tagged template literallog(chalk`CPU: {red ${cpu.totalPercent}%}RAM: {green ${ram.used / ram.total * 100}%}DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}`)
ora
显示终端的旋转 loading 动画(package ora)。
// 封装const ora = require('ora');const chalk = require('chalk');const spinner = ora();const start = msg => {spinner.text = chalk.blue(msg);spinner.start();};const success = msg => {spinner.stopAndPersist({symbol: chalk.green('✔'),text: chalk.green(msg),});};const stop = () => {spinner.stop();};const error = msg => {spinner.fail(chalk.red(msg));};module.exports = {start,stop,success,error,};// 使用const spinner from './spinner';spinner.start('Loading...');setTimeout(() => {spinner.success('Load success');}, 2000);
commander
minimist
progress estimator
在终端输出异步任务的进度条,它会根据每个任务的历史记录来估算这个任务需要的时间(pacakge progress)。能够较为准确的告知用户此次异步操作所需要的时间。
const createLogger = require('progress-estimator');const chalk = require('chalk');const path = require('path');let _logger = null;const logger = (task, message, estimate) => {if (!_logger) {_logger = createLogger({storagePath: path.join(__dirname, '.progress-estimator'),});}return _logger(task, chalk.blue(message), {estimate,});};const task1 = new Promise(resolve => {setTimeout(() => {resolve({ success: true });}, 1200);});const task2 = new Promise(resolve => {setTimeout(() => {resolve({ success: true });}, 4200);});async function run() {const startTime = Date.now();console.log();console.log(chalk.blue('Some Tasks'));console.log();await logger(task1, 'Task 1', 1500);await logger(task2, 'Task 2', 600);const endTime = Date.now();const time = ((endTime - startTime) / 1000).toFixed(2);console.log();console.log(chalk.green(`✨ Done in ${time}s`));console.log();}run();
