欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js編寫CLI的實例詳解

 更新時間:2017年05月17日 11:29:45   作者:cpselvis  
Node.js的應用場景有前后端分離、海量web頁面渲染服務、命令行工具和桌面端應用等等。本篇文章選取CLI(Command Line Tools)子領域,來談談Node.js編寫CLI的實踐,讓CLI切實解決實際工程問題。

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萬個三方包可供使用,你可以很方便的使用一些已經(jīng)編寫的很不錯的輪子去幫你快速開發(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)建軟鏈接。

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

$ 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命令行參數(shù)解析、核心命令以及插件機制。設計插件主要是為了保持整體功能的穩(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的查詢服務網(wǎng)址:http://registry.npmjs.org/
  2. registry網(wǎng)址后面跟上模塊名、版本好可以查詢模塊詳細信息,包括最新版本,以此來判斷模塊是否需要更新。比如: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 用戶輸入的參數(shù)解析
  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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

  • node.js中的fs.utimes方法使用說明

    node.js中的fs.utimes方法使用說明

    這篇文章主要介紹了node.js中的fs.utimes方法使用說明,本文介紹了fs.utimes的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 開發(fā)Node CLI構建微信小程序腳手架的示例

    開發(fā)Node CLI構建微信小程序腳手架的示例

    這篇文章主要介紹了開發(fā)Node CLI構建微信小程序腳手架,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 淺談nodejs中創(chuàng)建cluster

    淺談nodejs中創(chuàng)建cluster

    集群是一組相互獨立的、通過高速網(wǎng)絡互聯(lián)的計算機,它們構成了一個組,并以單一系統(tǒng)的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。本文將詳細介紹如何在nodejs中創(chuàng)建cluster。
    2021-06-06
  • Node.js服務端實戰(zhàn)之服務啟動過程詳解

    Node.js服務端實戰(zhàn)之服務啟動過程詳解

    這篇文章主要為大家介紹了Node.js服務端實戰(zhàn)之服務啟動過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 我的Node.js學習之路(三)--node.js作用、回調、同步和異步代碼 以及事件循環(huán)

    我的Node.js學習之路(三)--node.js作用、回調、同步和異步代碼 以及事件循環(huán)

    本篇文章主要介紹了node.js的幾個重要的知識點:node.js作用、回調、同步和異步代碼 以及事件循環(huán)
    2014-07-07
  • Node.js?應用探索文件解壓縮示例詳解

    Node.js?應用探索文件解壓縮示例詳解

    這篇文章主要為大家介紹了Node.js?應用探索文件解壓縮示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    fs模塊是nodejs官方提供用來操作文件的模塊,下面這篇文章主要給大家介紹了關于nodejs讀取本地mp3和mp4等媒體文件并播放的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • PM2自動部署代碼步驟流程總結

    PM2自動部署代碼步驟流程總結

    這篇文章主要介紹了PM2自動部署代碼步驟流程總結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • npm設置同時從多個包源加載包的方法

    npm設置同時從多個包源加載包的方法

    本文主要介紹了npm 設置同時從多個包源加載包的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • nodejs搭建本地http服務器教程

    nodejs搭建本地http服務器教程

    本篇文章主要介紹了nodejs搭建本地http服務器教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03

最新評論