如何从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实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
JavaScript中Object和Function的关系小结
Sep 26 Javascript
GreyBox技术总结(转)
Nov 23 Javascript
JavaScript中的私有/静态属性介绍
Jul 26 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
JavaScript this使用方法图解
Feb 04 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
极典R601SW收音机
2021/03/02 无线电
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
PHP常用编译参数中文说明
2014/09/27 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
Vue点击切换颜色的方法
2018/09/13 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
python中requests库session对象的妙用详解
2017/10/30 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
副校长竞聘演讲稿
2014/09/01 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
教师外出学习心得体会
2016/01/18 职场文书