很多编程语言都可以用来开发命令行工具。在写代码的时候,如果有一些简单的小工具作为辅助,可以在一定程度上提高开发效率。Node.js是作为前端必须掌握的技术点,学习使用它开发命令行工具也堪称必备技能。下面的内容就是介绍如何开发一个命令行工具,从简单到复杂。最后还会列出一些命令行参数的处理模块,让命令行工具更加灵活。可执行脚本首先,创建一个名为hello.cs的脚本文件。至于为什么不用后缀,这应该是为了方便阅读。毕竟很多执行脚本是没有后缀的。编写hello中需要执行的脚本代码:#!/usr/bin/envnodeconsole.log('helloworld');#!/usr/bin/envnode必须写在脚本文件的第一行,目的用于指定脚本文件执行的环境。这里指定执行环境为Node.js环境。如果想让文件可执行,需要指定脚本文件的权限为可执行。$chmod755hello执行完后,就可以执行hello了。$./hellohelloworld需要注意的是,在执行命令时,必须指定hello脚本文件所在路径,否则无法正常执行。$hellozsh:commandnotfound:hello如果希望命令行工具全局可执行,可以创建一个package.json文件。{"name":"hello","bin":{"hello":"hello"}}其中name是以后执行命令的关键字;bin用于指定命令对应的可执行脚本文件的地址。如果bin中只有一个可执行脚本,可以指定一个字符串,如"bin":"./bin/webpack.js"。创建package.json后,执行npm链接命令。$npmlink命令执行后,会在本机创建一个链接,连接到当前脚本文件所在的目录。~/node/v8.9.3/bin/hello->~/node/v8.9.3/lib/node_modules/hello/hello~/v8.9.3/lib/node_modules/hello->~/Desktop/test-cli即可查看全局hello指向node_modules/hello/hello,最终位置为当前脚本文件所在地址~/Desktop/test-cli。需要注意的是,指定当前链接后,只能在Node.js的全局目录下删除,或者直接删除自己的脚本文件所在目录。处理命令行参数在处理命令行参数之前,首先要了解命令行参数。在Node.js中,传递process.argv以获取命令行参数。$nodetest.jsfoobar此时通过process.argv获取的命令行参数是一个数组。['/Users/negivup/.nvm/versions/node/v8.9.3/bin/node','/Users/negivup/Desktop/test-cli/hello','foo','bar']可以看到第一个第一个参数是node,第二个是脚本文件,第三个参数是真正的入参。因此,要处理命令行参数,可以使用下面的形式来处理。#!/usr/bin/envnodeconsole.log('你好'+process.argv[2]);此时执行命令,可以根据输入确定输出。$hellowanghellowang处理命令行参数的常用模块下面介绍一些常用的命令行参数处理模块,以期以后能写出更强大的命令行工具。yargsminimistyargs和minimist都是用来解析命令行参数的,但是需要注意的是yargs内部的解析引擎是minimist。minimist是一个轻量级的命令行参数解析引擎。他们之间一定有共同点。不同之处在于yargs是minimist的进一步封装。参考链接阮一峰的Node.js命令行程序开发教程
