如何从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判断窗口是否最小化的代码(跨浏览器)
Aug 01 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
javascript模拟php函数in_array
Apr 27 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
js 判断一组日期是否是连续的简单实例
Jul 11 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 Javascript
微信小程序的部署方法步骤
Sep 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
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
srcElement表格样式
2006/09/03 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
英国团购网站:Groupon英国
2017/11/28 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
学生周末长期请假条
2014/02/15 职场文书
八一建军节感言
2014/02/28 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
规范化管理年活动总结
2014/08/29 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
项目经理岗位职责
2015/01/31 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python