nodejs实现命令行工具

为什么使用nodejs实现命令行工具

Node.js是一个基于事件驱动I/O的JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

众所周知,javascript已经成为最流行的编程语言,以前javascript只是用来实现web前端功能,但是nodejs的出现使得javascript不仅可以服务于web的后端,还能够作为通用的脚本语言,类似python/perl一样,实现更多的桌面相关的任务。

nodejs除了于web框架一起实现web后端的功能,作为devops我们可以使用nodejs做很多其他的事情:

  • 遍历目录,读写json和yaml配置文件;
  • 异步执行,或者多进程调用外部系统命令;
  • http请求,解析,或者生成web;
  • 查询数据库mango,redis,其他数据库;
  • 解析日志,监听问题,发送邮件;

安装nodejs

wget https://nodejs.org/dist/v12.18.0/node-v12.18.0-linux-x64.tar.xz
tar -xvf   node-v12.18.0-linux-x64.tar.xz   
mv node-v12.18.0-linux-x64  nodejs 
ln -s /app/software/nodejs/bin/npm /usr/local/bin/ 
ln -s /app/software/nodejs/bin/node /usr/local/bin/  
国内用户使用淘宝镜像:  
npm install -g cnpm --registry=https://registry.npm.taobao.org
然后使用cnpm来安装其他的模块

实现第一个helloworld的命令

#!/usr/bin/env node
console.log('hello world');
增加权限
chmod u+x yourscript  
运行./yourscript  
hello world

简单的脚本参数解析

process.argv中包含了所有的参数  
脚本中增加输入来查看参数:console.log(process.argv)  
执行脚本:./yourscript -g -f   
输出为:[ 'node', '/home/george/yourscript', '-f', '-g' ]  

程序的退出

if (err) {
  process.exit(1);
} else {
  process.exit(0);
}

将命令行工具打包为可安装的npm包

生成package.json:npm init
修改package.json:
  "name": "helloworld”,
  "author": "cicdops",
  "license": "Apache-2.0",
+ "bin": {
+   "helloworld": "./index.js"
+ }

本地安装:
npm install -g
$ helloworld
Hello, world!
其他人可以通过命令安装:npm install -g helloworld

参考:

https://blog.developer.atlassian.com/scripting-with-node/

https://shapeshed.com/command-line-utilities-with-nodejs/