如何从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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
javascript生成json数据简单示例分享
Feb 14 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
JavaScript定义变量和变量优先级问题探讨
Oct 11 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
AngularJS ng-blur 指令详解及简单实例
Jul 30 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
原生js实现碰撞检测
Mar 12 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 08 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 rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
详解Python循环作用域与闭包
2019/03/21 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python反扒机制的5种解决方法
2021/02/06 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
应届大学生自荐信
2013/12/05 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
明信片寄语大全
2014/04/08 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
生日庆典策划方案
2014/06/02 职场文书
就业协议书怎么填
2014/09/15 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
初中政治教师教学反思
2016/02/23 职场文书