麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Node.js編寫CLI的實例詳解

2019-11-19 16:34:15
字體:
來源:轉載
供稿:網友

Why Node.js?

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

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

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

看個demo

注: 此處的Logo使用的是figlet這個npm包來幫助生成

npm關聯(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)建軟鏈接。

如果模塊采用局部安裝的方式,則會在項目內的./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基本命令設計

$ 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命令行參數解析、核心命令以及插件機制。設計插件主要是為了保持整體功能的穩(wěn)定,避免頻繁升級;同時開放能力,支持開發(fā)者接入,完善整體的生態(tài)。

掃描器的實現(xiàn)

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

首先,需要一個任務隊列,隊列里面存放不同的掃描任務。每個掃描任務依賴相關的文件信息或者Commit信息,這個時候需要調用Git code提供的三方API進行文件信息拉取。之后,需要編寫一個規(guī)則引擎,這個規(guī)則引擎里面有多個規(guī)范相關的檢查工具,解析完成后會將結果生成HTML格式的字符串。最后調用郵件服務和定時任務服務去通知相關開發(fā)者。

插件機制設計

$ 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檢查是否存在插件,如果存在,會檢查當前插件是否是最新版本。如果不是最新版本,則提示用戶是否需要更新。然后將插件下載到Home目錄下的.feflow目錄(Windows系統(tǒng)為"C:/Users/username/.feflow" 目錄)下的node_modules里面,并且寫入到配置文件里面。

本地模塊注冊機制

本地模塊發(fā)現(xiàn)機制

npm 的 registry服務

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

常用三方包分享

  1. osenv 方便的獲取不同系統(tǒng)的環(huán)境和目錄配置
  2. figlet 命令行炫酷的Logo生成器
  3. meow 命令行幫助命令封裝
  4. inquire 強大的用戶交互
  5. chalk 讓命令行的output帶有顏色
  6. easytable 表格信息展示,用于升級包的提示
  7. minimlist 用戶輸入的參數解析
  8. shelljs Node.js執(zhí)行shell命令
  9. clui 進度條

遇到的問題

1,windows下用戶未設置HOME環(huán)境變量導致報錯

解決辦法: 由于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。修復換行問題。可以在工程根目錄下加.gitattributes文件,設置* text eol=lf,這樣git提交時就不會講LF轉換成CRLF

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线成人免费视频 | 夏目友人帐第七季第一集 | 黄色网络免费看 | 亚洲第一精品在线 | 精品国产欧美一区二区 | 欧美特黄一级高清免费的香蕉 | 伦一区二区三区中文字幕v亚洲 | cosplay裸体福利写真 | 在线中文字幕观看 | 日韩黄色免费电影 | 九九热在线视频观看 | 精品一区二区三区免费爱 | 久久精品视频亚洲 | 色网免费观看 | 国产精品免费大片 | 牛牛a级毛片在线播放 | 热99re久久免费视精品频软件 | 欧美 videos粗暴 | 91在线播放国产 | 日韩欧美视频一区二区三区 | 欧美hdfree性xxxx | www亚洲成人 | chinese军人gay呻吟 | 欧美一区2区三区4区公司二百 | 精品偷拍久久 | 亚洲片在线观看 | av免费片| 国产精品午夜未成人免费观看 | 91一区二区三区久久久久国产乱 | 一级黄色免费电影 | 日本aaa一级片 | 护士hd老师fre0性xxx | 日韩a毛片免费观看 | 国产免费一区二区三区在线能观看 | 久久靖品 | 草操影院| 亚洲成人第一页 | 国产婷婷一区二区三区 | av不卡免费观看 | 精品一区二区三区在线观看国产 | 高清国产午夜精品久久久久久 |