需要创建一个自己的 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()) // 这个是用户输入的值,选项默认值获取不到