1. D盘新创建一个文件夹my-cli
 
2. 切换到该文件夹,执行npm init -y初始化文件夹,这时候得到的package.json如下
 
3. 在当前目录下创建bin文件夹,并在里面创建一个my-cli的文件
    先在文件中写入如下内容
 
第一行是告诉我们,执行这个文件时,使用node环境,也就是用node来执行后面的语句内容

 

4. 修改package.json,在里面添加bin字段,这个字段的用途,是用来告诉npm,当我们创建软连接时,需要链接到哪个文件

 

5. 在当前目录执行npm link 命令,为当前文件夹创建软连接,让全局的node能找到我们当前的目录,并能执行cli脚本,执行npm link时,默认注册的命令为package.json中的name字段
执行玩命令后,会输出类似下面的一条日志
代表软链创建成功。

 

如果中间某一步错了,需要重新创建软链,但由于执行过npm link,再次执行时会报如下的错误,
这时只需在后面加上 –force参数即可,即npm link –force,意思是强制重新建立软链。

 

6. package.json中的bin字段也可以配置成对象的形式,让我们一次软链接多个文件,比如:
这样之后,重新创建软链,则就有了 my-cli 和 my-cli-test 两个全局命令,并且执行这两个命令会执行不同的文件脚本。

 

有了上面的基础后,我们通过在脚本中进行参数解析,做一些响应的逻辑,就可以实现类似cli的相关功能了。

 

实现一个cli可能需要用到的包:
commander:解析参数,输出配置项相关信息,比如-h, -version等
chalk:实现对控制台输出的文字添加不同的颜色
inquirer:实现输出各种选项,并获去用户的选择结果
fs-extra:增强的 fs 模块,主要用于文件和文件夹的操作和判断
ora:用于输出一个加载loading
axios:用于根据url和参数请求资源
download-git-repo:用于下载git仓库资源