溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

node.js學(xué)習(xí)之自己編寫命令行工具CLI

發(fā)布時(shí)間:2020-06-28 08:39:28 來源:網(wǎng)絡(luò) 閱讀:1181 作者:lixiaoyu1223 欄目:web開發(fā)

之前從來沒接觸過這類的課題,自己寫命令行工具,沒寫過之前覺得這是一個(gè)很高大上的玩意兒,寫過之后才發(fā)現(xiàn)原來不難。寫之前當(dāng)然是先在網(wǎng)上扒拉扒拉,看看別人怎么寫的,結(jié)果找來找去,千篇一律,一個(gè)字也不帶換的,還都是從npm倉庫中復(fù)制下來的,還復(fù)制的不全,我已無力吐嘈?。。。?/p>

最后還是在NPM倉庫中找到一段比較符合自己的介紹,就是自定義命令,下面就按照我的代碼記錄一下我是怎么寫的。

首先創(chuàng)建項(xiàng)目,alaska-cli,編輯package.json,加入babel等就不細(xì)說了,目錄結(jié)構(gòu)如下:

alaska-cli

-index.js

-src

--alaska-build.js


本項(xiàng)目依賴commander包,這是一個(gè)非常方便簡單的開發(fā)自己的CLI命令的包。


先看index.js:

'use strict';
const program = require('commander');
const buildAdmin = require('./src/alaska-build');
program
  .version('0.1.0')
  .command('alaska-build')
  .alias('build')
  .description('build admin views')
  .action(buildAdmin);

program.parse(process.argv);

導(dǎo)入commander, 導(dǎo)入CLI命令背后要執(zhí)行的函數(shù)文件。

使用commander創(chuàng)建命令:

  .version('0.1.0')

命令版本,這個(gè)沒什么好說的。

  .command('alaska-build')

命令名字,就是以后可以直接在命令窗口使用的名字,像webpack babel等。

  .alias('build')

命令的別名,就像小名一樣,一般是個(gè)短名字。

  .description('build admin views')

命令介紹,生辰八字什么的可以寫到這,

    .action(buildAdmin);

執(zhí)行命令時(shí)要調(diào)用的函數(shù),

program.parse(process.argv);

開始解析命令。

到這已經(jīng)差不多了,我要說現(xiàn)在收尾你信么,不管你信不信,反正我是信了,剩下的就是寫這個(gè)命令要怎么做事了。

看alaska-build.js:

/**
 * 所有讀取文件時(shí)的錯(cuò)誤處理
 * */
function excludeError(err, files) {
  if (err) {
    console.log(err);
  } else {
    if (typeof files === 'object' && files.length > 0) {
      collection(files);
    } else {
      console.log('未找到要構(gòu)建的文件!');
    }
  }
}
module.exports = function () {
  fs.readdir(path, excludeError);
};

這一段不用說了吧,就是讀取一個(gè)目錄下的所有文件,從每個(gè)文件里導(dǎo)出一些數(shù)據(jù)組合再輸出到另一個(gè)目錄下。

寫完這些邏輯,這個(gè)項(xiàng)目基本上已經(jīng)完了,把項(xiàng)目上傳到NPM倉庫,在其他項(xiàng)目里就可以用 npm install

來安裝這個(gè)包,之后就能像webpack babael 這類的命令一樣直接用了。


github :  https://github.com/maichong/alaska-cli.git

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI