這篇文章主要介紹了如何使用node編寫自己的cli工具,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是一家專業(yè)提供慶安企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為慶安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
準(zhǔn)備
開發(fā)一個cli工具前首先要想好它能做什么。以我自己為例,我需要一個工具,讓我能只輸入一行命令就幫我快速搭建好項(xiàng)目結(jié)構(gòu),就像這樣:

是不是很炫酷?放心,很簡單。
開始
首先創(chuàng)建你的cli項(xiàng)目,并使用npm init創(chuàng)建一個package.json。
$ mkdir my-cli && cd my-cli $ npm init
根據(jù)提示一步步創(chuàng)建好package.json。name屬性就是你發(fā)布到npm上的名字,這個是不能與npm上現(xiàn)有項(xiàng)目重名的,一個小技巧是使用npm install下載你想要起的包名字,如果報錯404,那么你的包名是可用的。最后創(chuàng)建好的package.json文件像這樣子:
{
"name": "my-cli",
"version": "0.0.1",
"description": "Auto generate project template",
"main": "index.js",
"bin": {
"my-cli": "./index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/hlme/my-cli.git"
},
"keywords": [
"cli"
],
"author": "798400626@qq.com",
"license": "MIT",
"bugs": {
"url": "https://github.com/hlme/my-cli/issues"
},
"homepage": "https://github.com/hlme/my-cli#readme"
}編寫可執(zhí)行文件
package.json中有一個"bin"字段,配置后才可以在控制臺使用你的命令。
"bin": {
"my-cli": "./index.js"
}我們配置了"my-cli"命令來執(zhí)行index.js文件。用你喜歡的編輯器,在項(xiàng)目主目錄下創(chuàng)建一個index.js文件。

注意第一行的"#! node"很重要,表示用node來執(zhí)行這個文件。如果沒有這句聲明,就會在記事本中打開index.js文件。
全局安裝你的包
使用 npm install -g 將你當(dāng)前的項(xiàng)目安裝到全局環(huán)境,現(xiàn)在你可以在命令行使用"my-cli"命令了。

用fs模塊快速生成項(xiàng)目模板
我們自定義的指令可以執(zhí)行了,接下來編寫代碼實(shí)現(xiàn)功能。my-cli的主要功能就是生成項(xiàng)目模板,一個思路是用一個templates文件夾保存項(xiàng)目模板,然后通過fs.mkdir()來創(chuàng)建項(xiàng)目目錄,最后把文件從templates文件夾拷貝到項(xiàng)目中去。
var fs = require('fs');
var path = require('path');
function copyTemplate (from, to) {
from = path.join(__dirname, 'templates', from);
write(to, fs.readFileSync(from, 'utf-8'))
}
function write (path, str, mode) {
fs.writeFileSync(path, str)
}
function mkdir (path, fn) {
fs.mkdir(path, function (err) {
fn && fn()
})
}核心代碼就這么點(diǎn),是不是非常簡單?
整個項(xiàng)目文件結(jié)構(gòu)差不多就這個樣子,把你需要的文件放到templates文件夾,然后用copyTemplate方法將文件拷貝到項(xiàng)目目錄下。

創(chuàng)建文件目錄和拷貝文件的過程,代碼看著比較丑陋

接收命令行參數(shù)
平常我們使用命令行工具時都會用到參數(shù),如 webpack -p, express -e 等,現(xiàn)在我們來為自己的cli添加接收命令行參數(shù)的功能。為my-cli設(shè)計(jì)四個參數(shù),用來向項(xiàng)目中添加類庫。
$ my-cli -j -s -v -b //-j :添加jQuery //-s :添加Swiper //-v :添加Vue //-b :添加Bootstrap
使用commander包可以簡化解析參數(shù)過程,但是本項(xiàng)目比較簡單,我也不想額外引入其他的包了,處理一些簡單的參數(shù)其實(shí)并不難。
node中我們可以使用process.argv來獲取命令行參數(shù),process.argv是一個參數(shù)數(shù)組,第一項(xiàng)為node.exe的絕對路徑,第二項(xiàng)為執(zhí)行該js的絕對路徑,使用process.argv.slice(2)即可獲取輸入的參數(shù)數(shù)組。

通過遍歷參數(shù)數(shù)組來檢查命令中輸入了哪些參數(shù)。如果輸入了預(yù)設(shè)的參數(shù),就為config對象添加對應(yīng)的屬性,在生成文件時根據(jù)onfig判斷是否將模板文件拷貝到項(xiàng)目中。繼續(xù)丑陋的代碼:

本地運(yùn)行
至此我們的項(xiàng)目已經(jīng)基本完成了,使用 npm install -g 將項(xiàng)目安裝到全局環(huán)境,然后新建一個項(xiàng)目文件夾,使用my-cli命令來生成項(xiàng)目模板。

發(fā)布到npm倉庫
要想將自己的包發(fā)布到npm上,首先得有一個npm賬號,創(chuàng)建賬號非常簡單,輸入npm adduser,簡單三步即可完成創(chuàng)建。

創(chuàng)建好user后,使用npm publish即可將當(dāng)前項(xiàng)目發(fā)布到npm上了,以后就可以使用npm install -g my-cli 來安裝你的cli工具。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用node編寫自己的cli工具”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
標(biāo)題名稱:如何使用node編寫自己的cli工具
文章URL:http://chinadenli.net/article18/jpchdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、小程序開發(fā)、網(wǎng)站設(shè)計(jì)、網(wǎng)站排名、網(wǎng)站導(dǎo)航、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)