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

Nodejs学习记录:制作命令行工具

时间:2023-04-03 20:41:02 Node.js

我们经常会遇到需要将Node模块转换为Linux命令行工具的需求,包括对命令行选项/参数的支持。参考文档->TheArtoftheCommandLineExample在开始编写之前要确保的一件事是安装了Node.js。可以在命令行运行whichnode确认安装,也可以运行node-v查看node的版本。如果你已经安装了node,你可以看到类似下面的输出。一般会安装node.js,会自动安装npm工具。$whichnode/d/ProgramFiles/nodejs/node$node-vv7.9.0创建目录代码:https://github.com/JXtreehous...首先任意创建一个文件夹,初始化package.json文件,在这个file在文件夹下创建bin目录:$mkdircommand-line-tool#创建文件夹$cdcommand-line-tool&&mkdirbin$npminit#初始化`package.json`文件将命令行cd写入bin目录下新建一个commander.js文件(自己命名),写入如下代码,在js文件顶部添加#!/usr/bin/env节点这段代码:上面的#!/usr/bin/envnode(或/d/ProgramFiles/nodejs/node),表示以下路径所示的程序用于执行当前文件夹。还需要一个package.json文件{"name":"command-line-tool","version":"0.1.0","description":"acommanderexample","main":"commander.js","bin":{"commander":"bin/commander.js"},"scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"author":"AlexZ33","license":"MIT"}运行nodebin/wcommander.js会显示当前文件夹下的所有文件和文件夹名称。package.json文件中bin的内容表示这个字段将commander命令映射到你的bin/commander.js脚本npm-linkpackage.json#bin版本号管理:这个工具使用semver规则npm版本号使用npmlinkmake确保在package.json文件中添加bin节点。然后打开命令工具,进入命令行工具目录"bin":{"commander":"bin/commander.js"}启用命令行:打开命令行,输入npmlink自动添加全局符号链接,然后你可以使用你自己的命令。npmlink这里我们通过npmlink把这个包安装到本地进行测试,然后我们可以通过$commander//bin//package.json$commander-v//versionis1.0.0$commander-h//Useage://-v--version[showversion]更多npm链接请参考npm官方文档。使用Phantom和Commandder创建截图工具如上面的小例子。第一行仍然是#!/usr/bin/envnode然后提供命令行参数/选项,包括重要的--help,你需要使用Commander模块:constphantom=require('phantom')constprogram=require('commander');program.version('0.0.1').option('-s,--source[website]','源网站').option('-f,--file[文件名]','文件名').parse(process.argv)construn=async()=>{constinstance=awaitphantom.create();constpage=awaitinstance.createPage();awaitpage.on('onResourceRequested',function(requestData){console.info('Requesting',requestData.url)});conststatus=awaitpage.open(program.source)awaitinstance.exit();}run()上面的construn=async()=>{}run()可以直接写成自执行匿名函数(异步函数(){})();npmphantom是处理命令行参数的常用模块yargsminimistyargs和minimist都是用来解析命令行参数的,但是有一点需要注意的是yargs内部的解析引擎是minimistminimist是一个轻量级的命令行参数解析引擎。inquirer:用户与命令行交互的工具。两者一定有共同点。不同之处在于yargs是minimist的进一步封装。有趣的包node-getmac/***@file获取本地mac地址*@authorliulangyu(liulangyu90316@gmail.com)*/varexecSync=require('child_process').execSync;varplatform=process.platform;module.exports=(function(){varcmd={win32:'getmac',darwin:'ifconfig-a',linux:'ifconfig-a||iplink'}[平台];varregStr='((?:[a-z0-9]{2}[:-]){5}[a-z0-9]{2})';varmacReg=newRegExp('ether\\s'+regStr+'\\s','i');尝试{vardata=execSync(cmd).toString();varres={win32:newRegExp(regStr,'i').exec(data),darwin:macReg.exec(data),linux:macReg.exec(data)}[平台];if(res){returnres[1];}}catch(e){return'';}})();linux命令nodejs实现mkdirpnode-mkdirp是一个node版本的linux命令mkdir-p是创建多级目录。node-mkdirp值得新手学习,学习错误码的使用和基本的API用法。我也写过创建多级目录的方法,不过我只是用split的方法逐层分离目录判断是否存在,然后再创建。node-mkdirp方法是通过fs.mkdir的错误码来判断的,非常巧妙。ENOENT:这只是“没有这样的目录条目”。由于目录项可以是目录或文件(或符号链接、套接字、管道或设备),参考BuildingasimplecommandlinetoolwithnpmNodejsusingNode.js创建命令行工具阮文的Node.js命令行程序开发教程逸风前端扫盲——搭建一个Node命令行工具