交互式命令行美化工具——inquirer.js

前言:現(xiàn)在前端寫項目估計都是使用 NodeJs 來構(gòu)建纺讲,一般在安裝 npm 包的時候未檩,我們會對項目進行初始化蕾总,這是輸入命令:npm initnpm init -y粥航。接下來就是幾個交互命令,輸入完成就會創(chuàng)建一個依賴文件:package.json生百。

但如果想自己做一個腳手架或者在某些時候在 CMD 窗口進行交互递雀,這個時候就可以使用 inquirer.js

首先npm init 初始化一個文件夾蚀浆,來測試這個庫缀程,然后安裝包:

npm install --save inquirer

再在文件夾里面新建一個 app.js搜吧,接下來的所有測試均在這個文件里面。

一杨凑、簡單功能參數(shù)介紹
  • type:表示提問的類型滤奈,包括:input、confirm撩满、 list蜒程、rawlist、expand伺帘、checkbox昭躺、password、editor伪嫁。
  • name: 存儲當(dāng)前輸入的值领炫。
  • message:問題的描述。
  • default:默認(rèn)值礼殊。
  • choices:列表選項驹吮,在某些type下可用,并且包含一個分隔符(separator)晶伦;
  • validate:對用戶的回答進行校驗碟狞。
  • filter:對用戶的回答進行過濾處理,返回處理后的值婚陪。
  • when:根據(jù)前面問題的回答族沃,判斷當(dāng)前問題是否需要被回答。
  • pageSize:修改某些type類型下的渲染行數(shù)泌参。
  • prefix:修改message默認(rèn)前綴脆淹。
  • suffix:修改message默認(rèn)后綴。
二沽一、input輸入
2.1 一個輸入
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"input",
        message:"請輸入你的姓名:",
        name:"name",
        default:"大傻子"
    }
]).then(answer=>{
    // 用戶輸入的結(jié)果最終會在這里輸出
    console.log(answer);
});

運行測試結(jié)果:

C:\Users\Administrator\Desktop\propt>node app.js
? 請輸入你的姓名: Condoe Hero
{ name: 'Condoe Hero' }

C:\Users\Administrator\Desktop\propt>
2.2 兩個輸入
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"input",
        message:"請輸入你的姓名:",
        name:"name",
        default:"大傻子"
    },
    {
        type:"input",
        message:"請輸入你的年齡:",
        name:"age",
        default:18
    }
]).then(answer=>{
    // 用戶輸入的結(jié)果最終會在這里輸出
    console.log(answer);
});

程序運行結(jié)果:

C:\Users\Administrator\Desktop\propt>node app.js
? 請輸入你的姓名: Condor Hero
? 請輸入你的年齡: 18
{ name: 'Condor Hero', age: 18 }

C:\Users\Administrator\Desktop\propt>

接下來如果你想要一百個輸入那盖溺?肯定是。铣缠。烘嘱。(情商)

2.3 validate驗證

看看 validate 是啥樣?

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"input",
        message:"請輸入你的姓名:",
        name:"name",
        default:"大傻子"
    },
    {
        type:"input",
        message:"請輸入你的年齡:",
        name:"age",
        default:18,
        validate:(val)=>{
            if(val > 10 && val < 120){
                return val;
            }else{
                return "我猜你絕對不是一個正常人類";
            }
        }
    }
]).then(answer=>{
    console.log(answer);
});

測試結(jié)果:

C:\Users\Administrator\Desktop\propt>node app.js
? 請輸入你的姓名: 大傻子
? 請輸入你的年齡: (18) 18
>> 18
三蝗蛙、confirm確認(rèn)
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"confirm",
        message:"是否現(xiàn)在監(jiān)聽蝇庭?",
        name:"watch",
        default:true
    },
    {
        type: "confirm",
        message: "是否能看到我取決于上面是否通過?",
        name: "pass",
        suffix: "后綴",
        when: function(answer) { // 當(dāng)watch為true的時候才會到達這步
            return answer.watch//只有我return true才會這個confirm
        }
    }
]).then(answer=>{
    console.log(answer);
});

看看三種不同輸入結(jié)果有啥變化捡硅?


四哮内、前綴和后綴
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"confirm",
        message:"是否現(xiàn)在監(jiān)聽?",
        name:"watch",
        default:true,
        prefix:"☆☆☆☆"http://前綴
    },
    {
        type: "confirm",
        message: "是否能看到我取決于上面是否通過壮韭?",
        name: "pass",
        suffix: "****",//后綴
        when: function(answer) { // 當(dāng)watch為true的時候才會到達這步
            return answer.watch //只有我return true才會這個confirm
        }
    }
]).then(answer=>{
    console.log(answer);
});
五北发、list 選項組
5.1使用箭頭選擇

list 一般配合 choices 使用:

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"list",
        message:"請選擇一個選項:",
        name:"fruit",
        default:"Apple",
        prefix:"☆☆☆☆",
        suffix:"****",
        choices:[
            "Apple",
            "pear",
            "Banana"
        ],
        filter: function (val) { // 使用filter將值變?yōu)榇髮?            return val.toUpperCase();
        }
    }
]).then(answer=>{
    console.log(answer);
});

查看動圖效果:


5.2 使用數(shù)字選擇

list 改成 rawlist

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"rawlist",
        message:"請選擇一個選項:",
        name:"fruit",
        default:"Apple",
        prefix:"☆☆☆☆",
        suffix:"****",
        choices:[
            "Apple",
            "pear",
            "Banana"
        ],
        filter: function (val) { // 使用filter將值變?yōu)榇髮?            return val.toUpperCase();
        }
    }
]).then(answer=>{
    console.log(answer);
});
5.3 使用簡寫(自動擴展成全寫)
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"expand",
        message:"請選擇一個顏色:",
        name:"color",
        default:"red",
        choices:[
            {
                key : 'R',
                value : "red"
            },
            {
                key : 'B',
                value : "blue"
            },
            {
                key : 'G',
                value : "green"
            }
        ]
    }
]).then(answer=>{
    console.log(answer);
});
expand

自己可以試試按下 h/H 回車的頁面是啥纹因。

5.4 多選和分隔符
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"checkbox",
        message:"選擇一至多種顏色:",
        name:"color",
        choices:[
            {
                name : "red"
            },
            new inquirer.Separator(), // 添加分隔符
            {
                name : "blue"
            },
            {
                name : "green"
            },
            {
                name : "pink",
                checked : true//默認(rèn)
            },
            new inquirer.Separator("--- 分隔符 ---"), // 自定義分隔符
            {
                name : "orange"
            }
        ]
    }
]).then(answer=>{
    console.log(answer);
});

如果不想自定義還可以:

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"checkbox",
        message:"選擇一至多種顏色:",
        name:"color",
        choices:[
            "red",
            "blue",
            "green",
            "pink",
            "orange"
        ]
    }
]).then(answer=>{
    console.log(answer);
});
5.5 密碼
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"password",
        message:"請輸入你的密碼:",
        name:"pwd"
    }
]).then(answer=>{
    console.log(answer);
});
5.6 輸入數(shù)字
const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"number",
        message:"請輸入數(shù)字:",
        name:"num"
    }
]).then(answer=>{
    console.log(answer);
});
5.7 編輯器

使用首選編輯器打開一個臨時文件,用戶退出編輯器后鲫竞,將讀取臨時文件的內(nèi)容辐怕。首選編輯器可以指定逼蒙。

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"editor",
        message:"寫下你想寫的東西:",
        name:"editor"
    }
]).then(answer=>{
    console.log(answer);
});
5.8 行數(shù)

用來更改顯示行數(shù)只對list, rawList, expand 或 checkbox有效从绘。

const inquirer = require("inquirer");
inquirer.prompt([
    {
        type:"checkbox",
        message:"選擇一至多種顏色:",
        name:"color",
        choices:[
            "red",
            "blue",
            "green",
            "pink",
            "orange"
        ],
        pageSize:1
    }
]).then(answer=>{
    console.log(answer);
});

只有一行,通過上下方向鍵來選擇:


2019年10月14日23:09:42

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末是牢,一起剝皮案震驚了整個濱河市僵井,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驳棱,老刑警劉巖批什,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異社搅,居然都是意外死亡驻债,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門形葬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來合呐,“玉大人,你說我怎么就攤上這事笙以√适担” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵猖腕,是天一觀的道長拆祈。 經(jīng)常有香客問我,道長倘感,這世上最難降的妖魔是什么放坏? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮老玛,結(jié)果婚禮上淤年,老公的妹妹穿的比我還像新娘。我一直安慰自己逻炊,他們只是感情好互亮,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著余素,像睡著了一般豹休。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桨吊,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天威根,我揣著相機與錄音凤巨,去河邊找鬼。 笑死洛搀,一個胖子當(dāng)著我的面吹牛敢茁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播留美,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼彰檬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谎砾?” 一聲冷哼從身側(cè)響起逢倍,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎景图,沒想到半個月后较雕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡挚币,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年亮蒋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妆毕。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡慎玖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出设塔,到底是詐尸還是另有隱情凄吏,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布闰蛔,位于F島的核電站痕钢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏序六。R本人自食惡果不足惜任连,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望例诀。 院中可真熱鬧随抠,春花似錦、人聲如沸繁涂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔罪。三九已至秉沼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唬复。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工矗积, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞咧。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓棘捣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親休建。 傳聞我的和親對象是個殘疾皇子乍恐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容