您好,登錄后才能下訂單哦!
之前從來沒接觸過這類的課題,自己寫命令行工具,沒寫過之前覺得這是一個(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
免責(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)容。