参考资料:
https://segmentfault.com/a/1190000002918295#articleHeader23
demo:
https://github.com/ALNY-AC/node-command-demo
概念
命令行工具是一个可以在命令行中执行的程序,比如:git、npm、node等。
一款好的命令行工具可以帮助我们事半功倍,比如vue-cli可以帮助我们快速搭建一个项目;npm可以帮助我们管理node项目和依赖管理等。
自己开发一款方便易用的命令行工具,可以让自己事半功倍,亦或是提升自己的技术水平。
起步
- 新建空的项目文件夹。
- 进入文件夹,通过
npm init
命令创建一个基于node的项目(一些选项可以回车略过,后面我会单独说明这些选项)。 - 在根目录下创建index.js
- 在index.js第一行加上代码:#!/usr/bin/env node
- 开始编写代码
#!/usr/bin/env node
console.log('Hello Word');
- 在根目录下执行
node index.js
自此,你已经成功的搭建了一个node项目,并且成功的运行了起来,但这还不是我们想要的“命令行工具”
bin
通过node执行js文件不是我们想要的命令行工具,我们想要的是通过一个自定义的命令名来执行,比如npm i,npm就是自定义的名字。想要实现这一目标,就需要在package.json
文件中配置bin
选项
package.json
"bin": {
"node-cmd": "./index.js"
}
node-cmd:可以在命令行中执行的命令的名称
./index.js:命令行所执行的文件
bin可以配置多个名字
install
如果在项目目录下运行没有问题,可以将当前目录模块安装到全局,也可以采用此方法来更新你的命令行工具
npm install . -g
通过npm install的方式将你的命令行工具安装到全局,那个点“.”代表的就是你当前工程目录。
link
或者在项目目录下输入npm link
,会自动将你当前项目关联到全局命令中
全局运行
打开任意命令行,输入bin中配置的名字,就可以全局运行你自己的命令行了!
开源贡献
开发完的命令行工具,可以发布到npm库上供同事、朋友、技术群、全世界的人安装。
发布到npm中
发布必须注册 npm和github 账号,且源必须是npm的源,不能使用淘宝或其他的源。
npm publish
安装
全局安装
npm install -g node-cmd
或本地安装
npm install node-cmd
入门
仅仅输出一个字符串不是我们想要的。有时候我们期望用户可以在执行命令的时候带上一些参数,比如 npm i 的i就是安装的意思,比如 node index.js 后面的index.js其实也是一个参数,这个参数的意思是“根据这个路径执行这个文件”。
Commander
npm:https://www.npmjs.com/package/commander
中文文档:https://github.com/tj/commander.js/blob/HEAD/Readme_zh-CN.md
我们使用Commander库作为处理用户参数的工具
安装
在你项目根目录下执行:
npm install commander -S
获取用户参数
#!/usr/bin/env node
const program = require('commander');
program
.option('-l, --language [lang]', '我喜欢的开发语言')
.option('-x, --x', '学习')
program.parse(process.argv);
// 拿到所有参数
const options = program.opts();
console.warn(options.language);
console.warn(options.x);
if (options.language) {
//如果参数是输入选项,则会返回输入的信息
}
if (options.x) {
//如果参数非输入选项,则会返回一个boolen的值
}
执行结果
具体参数配置,可以查阅文档