node . js编写CLI的实例详解

  

为什么node . js # 63;

  

常用的用来编写CLI的语言有python、ruby、perl、节点。js等等。为什么选取node . js作为CLI的语言编写工具呢?有三个理由:

  
      <李>对Javascript语言更加熟悉李   <李> npm完善的生态系统李   <李> npm OS无关的包管理机制李   
  

主要原因还是归咎于npm完善的生态,目前npm官方有47.5万个三方包可供使用,你可以很方便的使用一些已经编写的很不错的轮子去帮你快速开发。另一方面,你不需要考虑跨平台的安装问题,比如OSX上的自酿酒,Debian的资质,CentOS上的百胜。如果使用壳或者其它语言来编写CLI,需要针对各个主流操作系统来做兼容并且发布到不同的平台。

  

看个演示   

 node . js编写CLI的实例详解

  

注:此处的标志使用的是figlet这个npm包来帮助生成

  

<强> npm关联CLI的基本原理

  

如何让node . js编写的包可执行?其实很简单,只需要在package.json里面增加一个本字段。模块发布到npm上后,开发者安装这个包的时候会检查是否有本字段,如果有本字段则会使用软链接的方式创建可以全局使用的命令。

  

如果模块采用全局安装的方式,对于类unix系统,会在/usr/地方/bin目录创建软链接,对于windows系统,在C: \ \用户名\ AppData \漫游用户\ npm目录创建软链接。

  

如果模块采用局部安装的方式,则会在项目内的。/node_modules。斌目录创建软链接。

  

配置好的包。json如下:
  

        …   “描述”:“一个命令行工具旨在改善前端工程师工作流。”,   “主要”:“lib/index.js”,   "本":{   :“feflow/bin/feflow。”   }   …   之前      

<强> CLI基本命令设计
  

        美元feflow——帮助      一个命令行工具旨在改善前端工程师的工作流程      用法:feflow[选项](命令)      命令:   初始化选择一个支架来初始化项目。   扫描——接收机扫描组和邮件接收者   安装& lt; plugin>安装一个插件或自耕农生成器。      选项:   ——版本,(vV)印刷版和退出成功   ——帮助,打印此successf帮助和退出   之前      

<强> Feflow的技术架构

  

Feflow总体分为3个模块,包括解析器命令行参数解析,核心命令以及插件机制。设计插件主要是为了保持整体功能的稳定,避免频繁升级;同时开放能力,支持开发者接入,完善整体的生态。

  

 node . js编写CLI的实例详解

  

<强>扫描器的实现

  

在一个工程项目中,有各种各样的规范,比如项目命名规范,描述规范,目录结构规范,README.md规范,是否增加基本监控等等。编写扫描器扫描仪,对某个组里面的所有业务项目进行扫描,将不符合规范的仓库和不符合规范的地方列举出来,并且捞出责任人。最后通过邮件及定时任务发送给相关同学,并且敦促修改。扫描器流程图如下:

  

 node . js编写CLI的实例详解

  

首先,需要一个任务队列,队列里面存放不同的扫描任务。每个扫描任务依赖相关的文件信息或者提交信息,这个时候需要调用Git代码提供的三方API进行文件信息拉取。之后,需要编写一个规则引擎,这个规则引擎里面有多个规范相关的检查工具,解析完成后会将结果生成HTML格式的字符串。最后调用邮件服务和定时任务服务去通知相关开发者。

  

<>强插件机制设计
  

        美元feflow安装& lt; plugin>#安装一个插件,力则会强制安装   美元feflow移除& lt; plugin>#卸载一个插件   $ # feflow列表列举出所有插件信息   美元feflow列表& lt; plugin>#列举某个插件信息      

<>强插件机制实现

  

插件机制的实现包括两个部分:插件注册机制和插件发现机制.feflow要求插件必须以feflow-plugin——开头或者发生器——开头,发电机作为一种特殊的插件,插件代码以npm包的形式存储和管理。运行feflow安装插件命令时,会通过npm的regsitry检查是否存在插件,如果存在,会检查当前插件是否是最新版本。如果不是最新版本,则提示用户是否需要更新。然后将插件下载到家里目录下的.feflow目录(Windows系统为“C: \ \用户名\用户。feflow“目录)下的node_modules里面,并且写入到配置文件里面。

node . js编写CLI的实例详解