使用commander.js开发命令行工具
nodejs内置了对命令行操作的支持,node工程下
package.json 中的
bin 字段可以定义命令名和关联的执行文件。
{
"name": "macaw-cli",
"version": "1.0.0",
"description": "我的cli",
"bin": {
"macaw": "./bin/macaw.js"
}
}经过这样配置的nodejs项目,在使用
-g 选项进行全局安装的时候,会自动在系统的
[prefix]/bin 目录下创建相应的符号链接(symlink)关联到执行文件。如果是本地安装,这个符号链接会生成在
./node_modules/.bin 目录下。这样做的好处是可以直接在终端中像执行命令一样执行nodejs文件。关于
prefix ,可以通过
npm config get prefix 获取。hello, commander.js
在bin目录下创建一个macaw.js文件,用于处理命令行的逻辑。
touch ./bin/macaw.js接下来就要用到github上一位神级人物——tj ——开发的模块commander.js 。commander.js可以自动的解析命令和参数,合并多选项,处理短参,等等,功能强大,上手简单。具体的使用方法可以参见项目的README。
在
macaw.js 中编写命令行的入口逻辑
#!/usr/bin/env nodeconst program = require('commander') // npm i commander -D
program.version('1.0.0')
.usage('<command> [项目名称]')
.command('hello', 'hello')
.parse(process.argv)
接着,在
bin 目录下创建
macaw-hello.js ,放一个打印语句
touch ./bin/macaw-hello.js
echo "console.log('hello, commander')" > ./bin/macaw-hello.js这样,通过node命令测试一下
node ./bin/macaw.js hello不出意外,可以在终端上看到一句话:hello, commander。
commander支持git风格的子命令处理 ,可以根据子命令自动引导到以特定格式命名的命令执行文件,文件名的格式是
[command]-[subcommand] ,例如: macaw hello => macaw-hello
macaw init => macaw-init
定义init子命令
我们需要通过一个命令来新建项目,按照常用的一些名词,我们可以定义一个名为
init









