需要创建一个自己的 cli 工具,其实很简单:
第一步:让命令跑起来
首先我们在一个空白项目中,进行 npm init
创建 package.json 文件
然后为这个 package.json 文件添加一个 bin
属性,下面两种方式都可以让 my-cli
成为命令:
"name": "my-cli"
"bin": "./bin/index.js"
"bin": {
"my-cli": "./bin/index.js"
}
上面我们计划将我们的脚本放在 ./bin/index.js
中,所以接下来,我们来创建这个文件。它第一行是一个 shebang + 路径的形式。
这里要求这个路径需要绝对路径,但是我们不同的环境下,node 的安装路径是不同的,怎么解决这个问题呢?其实很简单,像下面这样写:
#! /usr/bin/env node
它表示先运行 /usr/bin/env
,然后用它来运行 node
。可参考这篇文章:五分钟了解 Node.js Shebang。
我们完善这个文件,让它 console.log('hello world!')
。
最后,我们在项目根目录运行,将项目软链接到 npm 根目录。
$ npm link
第二步:让 cli 交互更好
我们使用一个 node.js 中广泛使用的库 commander
。
这个库,首先需要创建一个 program
实例:
const program = new Command();
然后使用 option
方法添加参数,它第一个参数是一个固定的格式写法,第二个参数是描述,第三个参数是默认值。
program.option('-p, --port <number>', 'listen port', 8080);
然后调用 parse
方法进行解析,然后通过 opts
方法可以获得用户输入的数值:
program.parse()
console.log(program.opts()) // 这个是用户输入的值,选项默认值获取不到