全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Node.js编写CLI的实例详解

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# nodejs  # cli  # cli例子  # 使用nodejs开发cli项目实例  # 最新版本  # 命令行  # 则会  # 三方  # 报错  # 解决办法  # 的是  # 换行  # 有个  # 你可以  # 多个  # 只需  # 帮你  # 会在  # 你不  # 要在  # 可以通过  # 很不错  # 这个时候  # 如果不是 


相关文章: 如何快速上传自定义模板至建站之星?  如何快速生成专业多端适配建站电话?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  图册素材网站设计制作软件,图册的导出方式有几种?  教学网站制作软件,学习*后期制作的网站有哪些?  内部网站制作流程,如何建立公司内部网站?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  利用JavaScript实现拖拽改变元素大小  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  手机网站制作与建设方案,手机网站如何建设?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  广州商城建站系统开发成本与周期如何控制?  如何选择香港主机高效搭建外贸独立站?  深圳网站制作的公司有哪些,dido官方网站?  网站制作企业,网站的banner和导航栏是指什么?  XML的“混合内容”是什么 怎么用DTD或XSD定义  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  网站设计制作企业有哪些,抖音官网主页怎么设置?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  广德云建站网站建设方案与建站流程优化指南  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  css网站制作参考文献有哪些,易聊怎么注册?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  已有域名如何免费搭建网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何在西部数码注册域名并快速搭建网站?  网站制作免费,什么网站能看正片电影?  如何用已有域名快速搭建网站?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何通过商城自助建站源码实现零基础高效建站?  如何通过FTP空间快速搭建安全高效网站?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在云主机上快速搭建多站点网站?  如何选择美橙互联多站合一建站方案?  h5网站制作工具有哪些,h5页面制作工具有哪些?  红河网站制作公司,红河事业单位身份证如何上传?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  小型网站建站如何选择虚拟主机?  企业微网站怎么做,公司网站和公众号有什么区别?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在阿里云虚拟服务器快速搭建网站?  建站之星如何实现五合一智能建站与营销推广?  html制作网站的步骤有哪些,iapp如何添加网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。