如何从0开始用node写一个自己的命令行程序

作者:tiancai啊呆 时间:2024-05-03 15:56:26 

前言

什么是命令行程序呢?像我们常见的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

参考资料

手把手教你使用nodejs编写cli(命令行)

Node.js 命令行程序开发教程-阮一峰

来源:https://www.jianshu.com/p/57eaec6cf97b

标签:node,命令行程序
0
投稿

猜你喜欢

  • MySQL数据库表修复 MyISAM

    2024-01-19 16:39:08
  • 全网最细 Python 格式化输出用法讲解(推荐)

    2021-07-15 12:01:32
  • Python实现求解最大公约数的五种方法总结

    2023-07-02 20:34:46
  • 高质量Python代码编写的5个优化技巧

    2022-04-20 16:49:16
  • 如何用Python进行回归分析与相关分析

    2023-11-24 01:08:14
  • Go语言单元测试超详细解析

    2024-04-28 09:12:20
  • python 采集中文乱码问题的完美解决方法

    2021-05-13 13:46:58
  • python求众数问题实例

    2022-02-06 22:25:40
  • Python eval函数原理及用法解析

    2021-04-29 05:17:18
  • python爬虫爬取股票的北上资金持仓数据

    2023-11-18 20:44:56
  • 鼠标实现图片的渐有渐无

    2013-06-30 02:49:10
  • Golang 使用Map实现去重与set的功能操作

    2024-02-21 14:54:21
  • PyCharm Community安装与配置的详细教程

    2022-05-03 18:20:40
  • 用Dreamweaver设计自动关闭的网页

    2010-09-02 12:29:00
  • 关于TypeScript开发的6六个实用小技巧分享

    2024-04-16 08:59:26
  • JS合并数组的几种方法及优劣比较

    2024-06-05 10:02:00
  • 浅谈Python响应式类库RxPy

    2021-12-24 12:44:26
  • 程序猿新手学习必备的Python工具整合

    2024-01-02 00:53:26
  • 基于PHP的登录和注册的功能的实现

    2024-04-30 08:48:04
  • asp javascript值的互相传递方法

    2011-03-30 10:37:00
  • asp之家 网络编程 m.aspxhome.com