当前位置: 首页 > 后端技术 > Node.js

使用node.js搭建命令行工具

时间:2023-04-03 10:14:59 Node.js

工具说明Inquirer.js:一个node.js模块,封装了常用的命令行交互,通过它可以轻松搭建一个新的命令行应用程序。shell.js:一个跨平台的unixshell命令模块。Node版本:由于inquirer.js的异步方法默认返回Promise,建议使用node.js>=8。在目标工作中,有大量的项目需要进行测试、编译、更新版本号、提交,甚至是上线前最后一步相同的命令。这里我们使用命令行工具将这些步骤一键自动化,同时进行预检,防止出错。准备创建一个新的Node.js项目。创建文件bin/my-cli.js。Node.js项目通常将cli入口放在bin目录下,其他模块放在lib目录下。在bin/my-cli.js文件的头部添加#!/usr/bin/env节点。将"bin":{"my-cli":"./bin/my-cli.js"}添加到package.json,声明我们要使用的命令。在项目根目录下执行npmlink创建一个全局命令my-cli。稍微修改my-cli.js,添加代码console.log("Iamaclitool!"),然后打开控制台运行my-cli命令。如果您看到控制台输出Iamaclitool!,则表示成功。安装依赖首先安装主要依赖的两个模块(这两个模块的使用请参考官方文档)npminstallinquirershelljs构建和发布流程自动化接下来首先实现测试、更新版本号、构建的自动化,并自动提交和发布constpkg=JSON.parse(fs.readFileSync(pkgPath,'utf8'));const{version}=awaitinquirer.prompt([{type:'list',name:'version',message:'Versionnumberupdatemethod:',choices:[{name:`v${semver.inc(pkg.version,'patch')}:FixBugs/Patch`,value:'patch'},{name:`v${semver.inc(pkg.version,'minor')}:发布新版本`,value:'minor'},]}]);//拉取最新版本shelljs.exec('gitpull');//运行测试shelljs.exec('npmtest');//通过npmversion更新版本号,但不会自动添加git标签,而是在构建完成后通过cli工具添加shelljs.exec(`npmversion${version}--no-git-tag-version`);//Buildshelljs.exec('npmrunbuild');//提交发布代码constnextVersion=semver.inc(pkg.version,version);shelljs.exec('gitadd.-A');shelljs.exec(`gitcommit-m"build:v${nextVersion}"`)shelljs.exec(`gittag-av${nextVersion}-m"build:${nextVersion}"`);shelljs.exec("gitpush")shelljs.exec("gitpush--tags");添加一个新功能:配置检查接下来,在my-cli中添加一个功能:当检查package.json中my-cli对象的check-baidu-id属性为true时检查baidu-id属性是否存在项目的config.jsonif(pkg['my-cli']&&pkg['my-cli']['check-baidu-id']){constconfigPath=path.join(process.cwd(),'config.json');if(!fs.existsSync(configPath)){shelljs.echo('找不到config.json');shelljs.exit(1);}constconfig=JSON.parse(fs.readFileSync(configPath,'utf8'));if(!config['baidu-id']){shelljs.echo('config.json缺少属性[baidu-id]');shelljs.exit(1);最后一步是一个简单的cli程序,将构建和发布过程自动化,在构建和发布之前也会进行配置检查。在实际项目中,为了提高程序的稳定性,需要增加检查当前项目中是否存在package.json,防止json解析错误,执行前确认等功能,详见示例代码。示例代码地址:https://github.com/Aturan/node-cli-example结语虽然使用shell也可以实现以上功能,但是写代码不是那么方便快捷,而且一旦遇到比较复杂的问题,可以用shell来实现,很麻烦,维护也是个问题。附言。其实你也可以用python。对于Ubuntu来说,系统自带Python是一个优势。无需安装环境,直接在服务器上使用即可。另外,Python还有一个Inquirer模块。