使用 Node.js 开发 CLI | moq
引言
通过 Node.js 编写一个 全局可用 CLI,用于日常生活。
功能如下:
npm 初始化 项目
新建文件夹 moq
进入文件夹
npm 初始化项目
输入项目描述
完成 package.json 的创建
自定义命令
package.json 添加 bin:
完整 package.json 如下:
bin 使得 moq 成为一个可执行命令,如 npm init 中的 npm,而命令所执行文件即是 ./index.js
!/usr/bin/env node 表明 当前文件需以 Node.js 脚本执行
完成后,即可全局安装 moq,在项目所在目录执行:
此时全局安装成功,下面测试命令:
测试成功
交互式命令行
这里依赖两个库进行开发
commander.js :完整的 node.js 命令行解决方案
Inquirer.js :常见的交互式命令行集合
index.js 添加
1. moq hexop
notebook 项目下执行
内容如下:
注意:
yiyungent.github.io 为本人博客项目文件夹,与 notebook 处于同一级,所以才使用 ../yiyungent.github.io,
./ 表示当前路径
最后 cd ../notebook 又切回来,方便以后操作,当然也可以不要
发布到 npm
Q&A
补充
command:命令,比如 vue
[subCommand]:子命令,比如 vue create
[options]:选项,配置,同一个命令不同选项会有不一样的操作结果,比如 vue -h,vue -v
[arguments]:参数,某些命令需要使用的值,比如 vue create myApp
选项与参数的区别:选项是命令内置实现,用户进行选择,参数一般是用户决定传入的值 选项一般会有全拼与简写形式(具体看使用的命令帮助),比如 --version = -v
全拼:以 -- 开头 / 简写:以 - 开头
选项也可以接受值,值写在选项之后,通过空格分隔
多个简写的选项可以连写,开头使用一个 - 即可,需要注意的是,如果有接受值的选项需要放在最后,比如:
vue create -d -r <-r的值> myApp
vue create -dr <-r的值> myApp
参考
感谢帮助!
工作效率up! up! up! ,一起来实现一个Node.js-CLI开发工具吧。 - incess的个人空间 - OSCHINA - 中文开源技术交流社区
玩转Node.js-CLI开发 - 伤心的瘦子 - 博客园
nodejs 遍历目录(文件夹)下的所有文件_逆水行舟,不进则退-CSDN博客_nodejs遍历目录下所有文件
js-yaml 提取markdown中的front-matter - 阿豪boy的个人空间 - OSCHINA - 中文开源技术交流社区
正则表达式 – 修饰符(标记) | 菜鸟教程
node.js如何引用其它js文件 - 挑战者V - 博客园
手把手教你用Node.js创建CLI - 知乎
-
实现执行下方语句,将用于笔记本的Hexo文章中公开文章复制到 用于博客的 Hexo 文章中:
1 | moq hexop './' '../yiyungent.github.io' |
1 | mkdir moq |
1 | cd moq |
1 | npm init |

1 | "bin": { |
1 | { |
测试
新建 index.js,内容如下:1 | #!/usr/bin/env node |
1 | npm install -g |

1 | moq |

1 | npm install commander |
1 | npm install inquirer |
1 | const { program } = require('commander'); |
1.1 解析 YAML
使用:https://github.com/nodeca/js-yaml1 | npm install js-yaml |
1.2 编写 tools.js
新建 tools.js,内容如下:1 | const fs = require("fs"), |
1.3 编写 index.js
1 | #!/usr/bin/env node |
1.4 测试
moq 项目下执行1 | npm install -g |
1 | moq hexop './' '../yiyungent.github.io' |


1.5 创建 note-to-blog.ps1
在 用于笔记本 的 Hexo 根目录:notebook 创建 note-to-blog.ps1 文件
1 | moq hexop './' '../yiyungent.github.io' |

1 | npm publish --registry https://registry.npmjs.org |
CLI简介
举例:vue-cli: vue create app1 | command [subCommand] [options] [arguments] |
[subCommand]:子命令,比如 vue create
[options]:选项,配置,同一个命令不同选项会有不一样的操作结果,比如 vue -h,vue -v
[arguments]:参数,某些命令需要使用的值,比如 vue create myApp
选项与参数的区别:选项是命令内置实现,用户进行选择,参数一般是用户决定传入的值 选项一般会有全拼与简写形式(具体看使用的命令帮助),比如 --version = -v
全拼:以 -- 开头 / 简写:以 - 开头
选项也可以接受值,值写在选项之后,通过空格分隔
多个简写的选项可以连写,开头使用一个 - 即可,需要注意的是,如果有接受值的选项需要放在最后,比如:
vue create -d -r <-r的值> myApp
vue create -dr <-r的值> myApp
执行 PowerShell(xxx.ps1)文件
1 | ./note-to-blog.ps1 |