前言#
如果你准备做一个cli脚手架,那你的包除了安装在全局之外还需要有一个自己的指令,不然别人在使用你的command就会非常麻烦,另外,可以自定义命令行指令也是一个很有逼格的事情,比如create-app这种。
搭建环境#
npm init --yes
npm install commander
echo > main.js
mkdir bin
cd bin
echo > cli.js另外,请不要把包名字起的和插件名字一样,对方会拒绝下载。并且注意不要把commander放到devDependencies,这样会导致你的包发布之后对方下载时不会自动安装依赖。
然后打开package.json文件,修改/新增以下内容


然后我们进入到bin/cli.js中

#!/usr/bin/env node是通知系统用node运行该文件,这时系统就会自动去找node的位置然后运行该文件。

my-commander这个时候会直接报错,因为系统并不认识你的这个指令。

所以轮到我们的主角啦 -- commander
我们现在package.json文件中配置

这样你就能在node里面使用esm来开发了,当然这一步并非必要并且对node版本有要求,需要14以上。
commander#

我们直接进入 cli.js中
#!/usr/bin/env node
import { Command } from 'commander';
const program = new Command();
program.name('commander-study')
.description('a pkg to study commander')
.action((options) => {
console.log(options)
}) // 该指令需要执行的操作
program.option('-t, --test', 'test the commander');
program.command('my-commander').description('test my commander')
program.parse(process.argv) // 拿到需要的命令行参数
这个时候你的指令还是不能被识别的,需要被别的包依赖后才能有效。但是我们可以先用node跑起来试下
在终端运行node bin/cli.js

然后我们就需要进入本地测试阶段了,新建一个文件夹项目test
cd ../
mkdir test
cd test
npm init --yes
npm link ../你的包文件夹名npm link xxx: 官方提供的一种本地测试方式[3]


然后你在node_modules里就会发现你的包在里面了,并且你每次改动这个包之后不需要去重新link,直接ctrl + s保存文件即可。

然后就能测试我们的自定义指令啦
终端运行my-commander --test

这样就完成了。
这只是最基础的应用,感兴趣的大佬可自行官网摸索
commanderwww.npmjs.com/package/commander#name
参考#
- ^package.json - main https://docs.npmjs.com/cli/v8/configuring-npm/package-json#main
- ^package.json - bin https://docs.npmjs.com/cli/v8/configuring-npm/package-json#bin
- ^npm - link https://docs.npmjs.com/cli/v8/commands/npm-link
发布于 2022-09-29 12:01
