如何使用node.js编写Cli命令行
如何使用node.js编写Cli命令行
作为前端在日常开发中、经常会使用各式各样的cli工具,例如vue-cli,gulp-cli,angular-cli等。其实就是在cmd命令行。了解这些
命令行是如何生成、编写是很有必要的。
第一步:运行编写的js代码
基于NodeJS编写的Cli其实就是Node脚本。相信所有的前端开发都能够编写:
新建my-cli 文件夹存放项目。
新建index.js 文件编写测试代码。
// test-cli/index.js
console.log('hello world')
命令行调用
PS C:\my-cli> node index.js
## 输出
hello world
可以继续优化运行方式,在my-cli下创建package.json 新增
{
"scripts":{
"start":"node index.js"
}
}
然后命令行调用
PS C:\Users\Getech-200107-1\Desktop\my-cli> npm run start
> start
> node index.js
## 输出
hello world
这种npm run xxx的命令相信大家都不陌生。
那么可以自定义运行的命令吗?毕竟人家的cli都没有这个
第二步:自定义名字
有没有什么方式可以去掉命令行中的node,npm呢。答案当然是有咯
- 首先我们在脚本文件(
index.js)顶部添加声明
#!/usr/bin/env node
console.log('hello world')
添加
#!/usr/bin/env node或者#!/usr/bin/node,这是告诉系统,下面这个脚本,使用nodejs来执行。#!/usr/bin/env node的意思是让系统自己去找node的执行程序。#!/usr/bin/node的意思是,明确告诉系统,node的执行程序在路径为/usr/bin/node。
- 然后在
index.js所在目录下执行npm init。创建出一个新的package.json并新增bin字段
{
"name": "my-cli",
"version": "1.0.0",
"bin":{
"ismy-cli":"index.js"
}
}
- 最后执行
npm link,命令行输入自定义的名字
PS C:\Users\Getech-200107-1\Desktop\my-cli> ismy-cli
## 输出
hello world
最简单的cli就完成啦!
有的人,又会说。别人的cli里面又有输入,又有选择的。有交互的。
别急慢慢来。
第三步:询问
cli中最常见的就是通过用户选择或者输入,cli做不同的策略处理。
#!/usr/bin/env node
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('你来自哪里? ',answer=>{
console.log(answer)
process.exit(0)
});
执行
PS C:my-cli> ismy-cli
你来自哪里? 湖北
## 输出
湖北
第四步:获取参数
大多数的时候我们的cli不可能只创建一中类型的模板,这个时候我们一般通过 ismy-cli templeate1,ismy-cli templeate2来创建不同的模板内容。
命令行上的参数,可以通过 process 这个变量获取, process 是一个全局对象。通过 process 这个对象我们可以拿到当前脚本执行环境等一系列信息,其中就包括命令行的输入情况,这个信息,保存在 process.argv
#!/usr/bin/env node
console.log(`hello ${process.argv[2]||'world'}`)
执行
PS C:my-cli> ismy-cli big
## 输出
hello bigworld
PS C:my-cli> ismy-cli small
## 输出
hello smallworld
第5步:子进程
如何你希望,clone一个git仓库的代码,并推到一个新的仓库地址,则需要使用模块子进程
const { exec } = require('child_process');
exec(`git init && git add . && git commit -m init`, (err, stdout, stderr) => {
if(err) reject(err)
else resolve()
})
以上的这些点,可以构建成一个简单的cli工具。

浙公网安备 33010602011771号