如何从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 相关文章推荐
利用jq让你的div居中的好方法分享
Nov 21 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
jquery插件ContextMenu设置右键菜单
Mar 13 Javascript
require.js中的define函数详解
Jul 10 Javascript
如何理解Vue的.sync修饰符的使用
Aug 17 Javascript
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
微信小程序中显示倒计时代码实例
May 09 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 Javascript
解决layui轮播图有数据不显示的情况
Sep 16 Javascript
el-table树形表格表单验证(列表生成序号)
May 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
上海无线电三厂简史修改版
2021/03/01 无线电
php木马webshell扫描器代码
2012/01/25 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
json2.js的初步学习与了解
2011/10/06 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
遍历python字典几种方法总结(推荐)
2016/09/11 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python的互斥锁与信号量详解
2019/09/12 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
浅析Python 序列化与反序列化
2020/08/05 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
思想专业自荐信范文
2013/12/25 职场文书
大型车展策划方案
2014/02/01 职场文书
货车司机岗位职责
2014/03/18 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书