<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Commander 寫(xiě)自己的 Nodejs 命令

          共 2231字,需瀏覽 5分鐘

           ·

          2021-06-10 11:26


          commander 是一個(gè)輕巧的 nodejs 模塊,提供了用戶(hù)命令行輸入和參數(shù)解析強(qiáng)大功能。

          安裝

          npm install commander

          聲明 program 變量


          為簡(jiǎn)化使用,Commander 提供了一個(gè)全局對(duì)象。本文檔的示例代碼均按此方法使用:


          const { program } = require('commander');program.version('0.0.1');


          如果程序較為復(fù)雜,用戶(hù)需要以多種方式來(lái)使用 Commander,如單元測(cè)試等。創(chuàng)建本地 Command 對(duì)象是一種更好的方式:


          const { Command } = require('commander');const program = new Command();program.version('0.0.1');

          選項(xiàng)

          Commander 使用 .option() 方法來(lái)定義選項(xiàng),同時(shí)可以附加選項(xiàng)的簡(jiǎn)介。每個(gè)選項(xiàng)可以定義一個(gè)短選項(xiàng)名稱(chēng)(-后面接單個(gè)字符)和一個(gè)長(zhǎng)選項(xiàng)名稱(chēng)(--后面接一個(gè)或多個(gè)單詞),使用逗號(hào)、空格或|分隔。


          選項(xiàng)可以通過(guò)在 Command 對(duì)象上調(diào)用 .opts() 方法來(lái)獲取。對(duì)于多個(gè)單詞的長(zhǎng)選項(xiàng),使用駝峰法獲取,例如 --template-engine 選項(xiàng)通過(guò) program.opts().templateEngine 獲取。


          多個(gè)短選項(xiàng)可以合并簡(jiǎn)寫(xiě),其中最后一個(gè)選項(xiàng)可以附加參數(shù)。例如,-a -b -p 80 也可以寫(xiě)為 -ab -p80 ,甚至進(jìn)一步簡(jiǎn)化為 -abp80


          --可以標(biāo)記選項(xiàng)的結(jié)束,后續(xù)的參數(shù)均不會(huì)被命令解釋?zhuān)梢哉J褂谩?/p>


          默認(rèn)情況下,選項(xiàng)在命令行中的順序不固定,一個(gè)選項(xiàng)可以在其他參數(shù)之前或之后指定。


          常用選項(xiàng)類(lèi)型,boolean 型選項(xiàng)和帶參數(shù)選項(xiàng)。


          有兩種最常用的選項(xiàng),一類(lèi)是 boolean 型選項(xiàng),選項(xiàng)無(wú)需配置參數(shù),另一類(lèi)選項(xiàng)則可以設(shè)置參數(shù)(使用尖括號(hào)聲明在該選項(xiàng)后,如 --expect <value>)。如果在命令行中不指定具體的選項(xiàng)及參數(shù),則會(huì)被定義為 undefined。


          示例代碼:options-common.js

          program  .option('-d, --debug', 'output extra debugging')  .option('-s, --small', 'small pizza size')  .option('-p, --pizza-type <type>', 'flavour of pizza');
          program.parse(process.argv);
          const options = program.opts();if (options.debug) console.log(options);console.log('pizza details:');if (options.small) console.log('- small pizza size');if (options.pizzaType) console.log(`- ${options.pizzaType}`);


          測(cè)試命令

          $ pizza-options -d{ debug: true, small: undefined, pizzaType: undefined }pizza details:$ pizza-options -perror: option '-p, --pizza-type <type>' argument missing$ pizza-options -ds -p vegetarian{ debug: true, small: true, pizzaType: 'vegetarian' }pizza details:- small pizza size- vegetarian$ pizza-options --pizza-type=cheesepizza details:- cheese


          通過(guò) program.parse(arguments) 方法處理參數(shù),沒(méi)有被使用的選項(xiàng)會(huì)存放在 program.args 數(shù)組中。該方法的參數(shù)是可選的,默認(rèn)值為 process.argv

          選項(xiàng)的默認(rèn)值


          選項(xiàng)可以設(shè)置一個(gè)默認(rèn)值。


          示例代碼:options-defaults.js

          program  .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
          program.parse();
          console.log(`cheese: ${program.opts().cheese}`);


          測(cè)試命令

          $ pizza-optionscheese: blue$ pizza-options --cheese stiltoncheese: stilton


          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  999精品无码 | 影音先锋家庭乱伦 | 后入极品少妇 | 91精品国久久久久久无码一区二区三区 | 久久伊人网老师机激情 |