Node.js編寫CLI的執行個體詳解,node.jscli執行個體

來源:互聯網
上載者:User

Node.js編寫CLI的執行個體詳解,node.jscli執行個體

Why Node.js?

常用的用來編寫CLI的語言有 python, ruby, perl, Node.js等等。 為什麼選取Node.js作為CLI的語言編寫工具呢?有三個理由:

  1. 對Javascript語言更加熟悉
  2. npm 完善的生態系統
  3. npm OS無關的包管理機制

主要原因還是歸咎於npm 完善的生態,目前npm官方有47.5萬個三方包可供使用,你可以很方便的使用一些已經編寫的很不錯的輪子去幫你快速開發。另一方面,你不需要考慮跨平台的安裝問題,比如OSX上的homebrew、Debian的aptitude、CentOS 上的yum。如果使用shell或者其它語言來編寫CLI,需要針對各個主流OS來做相容並且發布到不同的平台。

看個demo

註: 此處的Logo使用的是figlet這個npm包來協助產生

npm關聯CLI的基本原理

如何讓Node.js編寫的包可執行?其實很簡單,只需要在package.json裡面增加一個bin欄位。模組發布到npm上後,開發人員安裝這個包的時候會檢查是否有bin欄位,如果有bin欄位則會使用軟連結的方式建立可以全域使用的命令。

如果模組採用全域安裝的方式,對於類unix系統,會在/usr/local/bin目錄建立軟連結,對於windows系統,在C:\Users\username\AppData\Roaming\npm目錄建立軟連結。

如果模組採用局部安裝的方式,則會在項目內的./node_modules/.bin目錄建立軟連結。

配置好的package.json如下:

… "description": "A command line tool aims to improve front-end engineer workflow.", "main": "lib/index.js", "bin" : {  "feflow" : "./bin/feflow" }…

CLI基本命令設計

$ 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的技術架構

Feflow總體分為3個模組,包括parser命令列參數解析、核心命令以及外掛程式機制。設計外掛程式主要是為了保持整體功能的穩定,避免頻繁升級;同時開放能力,支援開發人員接入,完善整體的生態。

掃描器的實現

在一個工程項目中,有各種各樣的規範,比如項目命名規範、描述規範、目錄結構規範、README.md規範,是否增加基本監控等等。編寫掃描器scanner,對某個Group裡面的所有商務專案進行掃描,將不符合規範的倉庫和不符合規範的地方列舉出來,並且撈出責任人。最後通過郵件及定時任務發送給相關同學,並且敦促修改。掃描器流程圖如下:

首先,需要一個任務隊列,隊列裡面存放不同的掃描任務。每個掃描任務依賴相關的檔案資訊或者Commit資訊,這個時候需要調用Git code提供的三方API進行檔案資訊拉取。之後,需要編寫一個規則引擎,這個規則引擎裡面有多個規範相關的檢查工具,解析完成後會將結果產生HTML格式的字串。最後調用郵件服務和定時任務服務去通知相關開發人員。

外掛程式機制設計

$ feflow install <plugin>      # 安裝一個外掛程式, --force則會強制安裝$ feflow remove <plugin>      # 卸載一個外掛程式$ feflow list            # 列舉出所有外掛程式資訊$ feflow list <plugin>       # 列舉某個外掛程式資訊

外掛程式機制實現

外掛程式機制的實現包括兩個部分:外掛程式註冊機制和外掛程式發現機制。feflow要求外掛程式必須以feflow-plugin-開頭或者 generator-開頭,generator作為一種特殊的外掛程式,外掛程式代碼以npm包的形式儲存和管理。運行feflow install plugin命令時,會通過npm 的 regsitry檢查是否存在外掛程式,如果存在,會檢查當前外掛程式是否是最新版本。如果不是最新版本,則提示使用者是否需要更新。然後將外掛程式下載到Home目錄下的.feflow目錄(Windows系統為"C:\Users\username\.feflow" 目錄)下的node_modules裡面,並且寫入到設定檔裡面。

本地模組註冊機制

本地模組發現機制

npm 的 registry服務

  1.  npm的查詢服務網址:http://registry.npmjs.org/
  2. registry網址後面跟上模組名、版本好可以查詢模組詳細資料,包括最新版本,以此來判斷模組是否需要更新。比如:React的最新版本可以通過http://registry.npmjs.org/react/latest 來獲得
  3. 返回的JSON對象裡面有個dist.tarball屬性,是某個版本的壓縮包地址

常用三方包分享

  1. osenv 方便的擷取不同系統的環境和目錄配置
  2. figlet 命令列炫酷的Logo產生器
  3. meow 命令列協助命令封裝
  4. inquire 強大的使用者互動
  5. chalk 讓命令列的output帶有顏色
  6. easytable 表格資訊展示,用於升級包的提示
  7. minimlist 使用者輸入的參數解析
  8. shelljs Node.js執行shell命令
  9. clui 進度條

遇到的問題

1,windows下使用者未設定HOME環境變數導致報錯

解決辦法: 由於windows下HOME環境變數並非預設存在,因此不能直接使用。判斷process.platform === ‘win32',優先使用HOME變數,否則使用USERPROFILE變數;建議使用osenv這個包。

2,OSX平台運行feflow報錯: env: node\r: No such file or directory

解決辦法: 由於類unix系統的分行符號號為\n,而windows系統為\n\r。修複換行問題。可以在工程根目錄下加.gitattributes檔案,設定* text eol=lf,這樣git提交時就不會講LF轉換成CRLF

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.