您好,登錄后才能下訂單哦!
Why Node.js?
常用的用來編寫CLI的語言有 python, ruby, perl, Node.js等等。 為什么選取Node.js作為CLI的語言編寫工具呢?有三個理由:
主要原因還是歸咎于npm 完善的生態(tài),目前npm官方有47.5萬個三方包可供使用,你可以很方便的使用一些已經(jīng)編寫的很不錯的輪子去幫你快速開發(fā)。另一方面,你不需要考慮跨平臺的安裝問題,比如OSX上的homebrew、Debian的aptitude、CentOS 上的yum。如果使用shell或者其它語言來編寫CLI,需要針對各個主流OS來做兼容并且發(fā)布到不同的平臺。
看個demo
注: 此處的Logo使用的是figlet這個npm包來幫助生成
npm關(guān)聯(lián)CLI的基本原理
如何讓Node.js編寫的包可執(zhí)行?其實很簡單,只需要在package.json里面增加一個bin字段。模塊發(fā)布到npm上后,開發(fā)者安裝這個包的時候會檢查是否有bin字段,如果有bin字段則會使用軟鏈接的方式創(chuàng)建可以全局使用的命令。
如果模塊采用全局安裝的方式,對于類unix系統(tǒng),會在/usr/local/bin目錄創(chuàng)建軟鏈接,對于windows系統(tǒng),在C:\Users\username\AppData\Roaming\npm目錄創(chuàng)建軟鏈接。
如果模塊采用局部安裝的方式,則會在項目內(nèi)的./node_modules/.bin目錄創(chuàng)建軟鏈接。
配置好的package.json如下:
… "description": "A command line tool aims to improve front-end engineer workflow.", "main": "lib/index.js", "bin" : { "feflow" : "./bin/feflow" } …
CLI基本命令設(shè)計
$ feflow --help A command line tool aims to improve front-end engineer workflow Usage: feflow [options] [command] Commands: init Choose a scaffold to initialize project. scan --receiver Scan a group and mail to receiver install <plugin> Install a plugin or a yeoman generator. Options: --version, -[vV] Print version and exit successful --help, Print this help and exit successf
Feflow的技術(shù)架構(gòu)
Feflow總體分為3個模塊,包括parser命令行參數(shù)解析、核心命令以及插件機制。設(shè)計插件主要是為了保持整體功能的穩(wěn)定,避免頻繁升級;同時開放能力,支持開發(fā)者接入,完善整體的生態(tài)。
掃描器的實現(xiàn)
在一個工程項目中,有各種各樣的規(guī)范,比如項目命名規(guī)范、描述規(guī)范、目錄結(jié)構(gòu)規(guī)范、README.md規(guī)范,是否增加基本監(jiān)控等等。編寫掃描器scanner,對某個Group里面的所有業(yè)務(wù)項目進行掃描,將不符合規(guī)范的倉庫和不符合規(guī)范的地方列舉出來,并且撈出責(zé)任人。最后通過郵件及定時任務(wù)發(fā)送給相關(guān)同學(xué),并且敦促修改。掃描器流程圖如下:
首先,需要一個任務(wù)隊列,隊列里面存放不同的掃描任務(wù)。每個掃描任務(wù)依賴相關(guān)的文件信息或者Commit信息,這個時候需要調(diào)用Git code提供的三方API進行文件信息拉取。之后,需要編寫一個規(guī)則引擎,這個規(guī)則引擎里面有多個規(guī)范相關(guān)的檢查工具,解析完成后會將結(jié)果生成HTML格式的字符串。最后調(diào)用郵件服務(wù)和定時任務(wù)服務(wù)去通知相關(guān)開發(fā)者。
插件機制設(shè)計
$ feflow install <plugin> # 安裝一個插件, --force則會強制安裝 $ feflow remove <plugin> # 卸載一個插件 $ feflow list # 列舉出所有插件信息 $ feflow list <plugin> # 列舉某個插件信息
插件機制實現(xiàn)
插件機制的實現(xiàn)包括兩個部分:插件注冊機制和插件發(fā)現(xiàn)機制。feflow要求插件必須以feflow-plugin-開頭或者 generator-開頭,generator作為一種特殊的插件,插件代碼以npm包的形式存儲和管理。運行feflow install plugin命令時,會通過npm 的 regsitry檢查是否存在插件,如果存在,會檢查當(dāng)前插件是否是最新版本。如果不是最新版本,則提示用戶是否需要更新。然后將插件下載到Home目錄下的.feflow目錄(Windows系統(tǒng)為"C:\Users\username\.feflow" 目錄)下的node_modules里面,并且寫入到配置文件里面。
本地模塊注冊機制
本地模塊發(fā)現(xiàn)機制
npm 的 registry服務(wù)
常用三方包分享
遇到的問題
1,windows下用戶未設(shè)置HOME環(huán)境變量導(dǎo)致報錯
解決辦法: 由于windows下HOME環(huán)境變量并非默認存在,因此不能直接使用。判斷process.platform === ‘win32',優(yōu)先使用HOME變量,否則使用USERPROFILE變量;建議使用osenv這個包。
2,OSX平臺運行feflow報錯: env: node\r: No such file or directory
解決辦法: 由于類unix系統(tǒng)的換行符號為\n,而windows系統(tǒng)為\n\r。修復(fù)換行問題??梢栽诠こ谈夸浵录?gitattributes文件,設(shè)置* text eol=lf,這樣git提交時就不會講LF轉(zhuǎn)換成CRLF
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。