如何从0开始用node写一个自己的命令行程序


Posted in Javascript onDecember 29, 2018

前言

什么是命令行程序呢?像我们常见的webpack,vue-cli都属于命令行程序。

本文将带你从0开始用node写一个自己的命令行程序,并发布到npm。

准备工作

我打算写一个统计个人代码提交量的命令行工具,起名 git-tool

npm地址见git-tool ,GitHub地址见 git-tool 。

1、在GitHub上新建一个项目git-tool。

2、克隆到本地进行开发。

3、执行npm init创建package.json文件。

// 其他代码
"bin": {
  "git-tool": "./index.js"
},
// 其他代码

bin字段里面的key值可以随便取名,value值为对应的执行文件。

4、新建index文件。

#!/usr/bin/env node
console.log('git-tool')

#!/usr/bin/env node 的意思是让系统自己去找node的执行程序,该行必不可少。

5、执行 npm link

如果执行该命令报错,参考 https://docs.npmjs.com/getting-started/fixing-npm-permissio

6、运行 git-tool

我们发现控制台会打印出git-tool。

如何从0开始用node写一个自己的命令行程序

图一

实现

经过以上步骤我们已经基本搭好环境了,下面就可以开始写自己的逻辑了。

参数读取

process.argv 用来获取命令行参数。

修改index.js文件

#!/usr/bin/env node
console.log('git-tool')
console.log(process.argv)

然后执行 git-tool ss cd ,结果如下图所示:

如何从0开始用node写一个自己的命令行程序

图二

process.argv 返回一个数组,数组前两位是固定的,分别是node程序的路径和脚本存放的位置,从第三位开始才是额外输入的内容。

npm社区有一些优秀的命令行参数解析包,如 yargs , commander.js

我使用的是 commander.js

插件

commander.js 的基本使用很简单,

#!/usr/bin/env node
const program = require('commander');
program.version('1.0.0')
program
 .command('codeLineNum')
 .description('统计git提交代码量')
 .option("--author [author]", "统计指定作者git提交代码量")
 .action(function (options) {
  console.log(options.author)
 })
program.parse(process.argv);

此时执行 git-tool -h ,效果如下:

如何从0开始用node写一个自己的命令行程序

图三

它会帮我们自动做一些事情,很方便。

思路

我们要实现统计代码提交量的目的,就必须借助git命令。

git log --author="username" --pretty=tformat: --numstat

该命令输出如下:

如何从0开始用node写一个自己的命令行程序

图四

第一列为增加的代码行数,第二列为删除的代码行数,第三列为改动的文件。

一些管道命令符可以处理这些数据,但是Windows系统不支持。

所以我的思路是把数据写到文件中,然后在逐行读取进行处理。

代码

具体实现细节就不展开了,有兴趣的可以去GitHub看源码。

最终实现效果如下

如何从0开始用node写一个自己的命令行程序

图五

如何从0开始用node写一个自己的命令行程序

图六

发布npm包

1、创建npm账户(如果已有,略过该步骤)

注册地址: https://www.npmjs.com/signup

2、登陆npm login

3、发布 npm publish

每次发布时都需要更改package.json 中的version;

发布需将npm registry地址设为 http://registry.npmjs.org

npm config set registry http://registry.npmjs.org

参考资料

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

Javascript 相关文章推荐
javascript列表框操作函数集合汇总
Nov 28 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
jQuery的ajax和遍历数组json实例代码
Aug 01 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
Angular中管道操作符(|)的使用方法
Dec 15 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
Apr 30 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
vue 子组件watch监听不到prop的解决
Aug 09 Javascript
使用Mock.js生成前端测试数据
Dec 13 Javascript
bootstrap与pagehelper实现分页效果
Dec 29 #Javascript
微信小程序实现滑动切换自定义页码的方法分析
Dec 29 #Javascript
vue实现分页组件
Jun 16 #Javascript
如何用RxJS实现Redux Form
Dec 29 #Javascript
Vue.js结合bootstrap前端实现分页和排序效果
Dec 29 #Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 #jQuery
javascript实现计算指定范围内的质数示例
Dec 29 #Javascript
You might like
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python之wxPython菜单使用详解
2014/09/28 Python
numpy数组拼接简单示例
2017/12/15 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
详解用python写一个抽奖程序
2019/05/10 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
Python实现汇率转换操作
2020/05/03 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
高级护理实习生自荐信
2013/09/28 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
教师先进个人材料
2014/12/17 职场文书
施工安全员岗位职责
2015/04/11 职场文书
餐馆开业致辞
2015/08/01 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL