Why Node.js?

常用的用来编写CLI的语言有 python, ruby, perl, Node.js等等。 为什么选取Node.js作为CLI的语言编写工具呢?有三个理由:
主要原因还是归咎于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,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小时内与您取得联系。