如何从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 相关文章推荐
编写Js代码要注意的几条规则
Sep 10 Javascript
简单实用jquery版三级联动select示例
Jul 04 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
vue移动端城市三级联动组件使用详解
Jul 26 Javascript
vue父子组件通信的高级用法示例
Aug 29 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
Ajax实现局部刷新的方法实例
Mar 31 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
PHP 代码规范小结
2012/03/08 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
JS实现放烟花效果
2020/03/10 Javascript
Python实现截屏的函数
2015/07/26 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
python生成密码字典的方法
2018/07/06 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
python集合删除多种方法详解
2020/02/10 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
线程同步的方法
2016/11/23 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
转党组织关系介绍信
2014/01/08 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
贷款担保书范本
2015/09/22 职场文书