使用Node.js构建命令行工具,根据查询创建文件。Node.js在用于构建命令行界面(CLI)时非常有用。在这篇文章中,我将教您如何使用Node.js构建一个命令行工具,该工具会提出一些问题并根据答案创建一个文件。入门首先,创建一个新的npm包(NPM是JavaScript包管理器)。mkdirmy-scriptcdmy-scriptnpminitNPM会问一些问题。接下来,我们需要安装一些包。npminstall--savechalkfigletinquirershelljs下面是我们需要的包:Chalk:终端正确字符样式Figlet:一个用普通字符拼大字的程序(LCTT译注:用标准字符拼图)Inquirer:General交互式命令行用户界面的集合ShellJS:用于Node.js的便携式UnixShell命令行工具创建一个index.js文件现在我们将创建一个包含以下内容的index.js文件。#!/usr/bin/envnodeconstinquirer=require("inquirer");constchalk=require("粉笔");constfiglet=require("figlet");constshell=require("shelljs");行工具在编写命令行工具所需的任何代码之前进行计划总是好的。这个命令行工具只做一件事:创建一个文件。它会问两个问题:文件名是什么,文件扩展名是什么?然后创建文件并显示成功消息,包括创建文件的路径。//index.jsconstrun=async()=>{//显示脚本介绍//提出问题//创建文件//显示成功消息};跑步();第一个功能只是对脚本的介绍。让我们用粉笔和figlet来做吧。constinit=()=>{console.log(chalk.green(figlet.textSync("NodeJSCLI",{font:"Ghost",horizo??ntalLayout:"default",verticalLayout:"default"})));}construn=async()=>{//显示脚本介绍init();//提问//创建文件//显示成功消息};跑步();然后,让我们编写一个函数来提问。constaskQuestions=()=>{constquestions=[{name:"FILENAME",type:"input",message:"不带扩展名的文件名是什么?"},{type:"list",name:"EXTENSION",message:"文件扩展名是什么?",choices:[".rb",".js",".php",".css"],过滤器:函数(val){returnval.split(“。”)[1];}}];returninquirer.prompt(questions);};//...construn=async()=>{//显示脚本介绍init();//问问题constanswers=awaitaskQuestions();const{FILENAME,EXTENSION}=答案;//createthefile//showsuccessmessage};注意,常量FILENAME和EXTENSIONS来自查询包。下一步将创建文件。constcreateFile=(filename,extension)=>{constfilePath=`${process.cwd()}/${filename}.${extension}`shell.touch(filePath);returnfilePath;};//...construn=async()=>{//显示脚本介绍init();//问问题constanswers=awaitaskQuestions();const{FILENAME,EXTENSION}=答案;//创建文件constfilePath=createFile(FILENAME,EXTENSION);//显示成功消息};***,重要的是我们将显示成功消息以及文??件路径。constsuccess=(filepath)=>{console.log(chalk.white.bgGreen.bold(`Done!Filecreatedat${filepath}`));};//...construn=async()=>{//显示脚本介绍init();//问问题constanswers=awaitaskQuestions();const{FILENAME,EXTENSION}=答案;//创建文件constfilePath=createFile(FILENAME,EXTENSION);//显示成功消息success(filePath);};让我们通过运行nodeindex.js来测试这个脚本,这是我们得到的:"chalk");constfiglet=require("figlet");constshell=require("shelljs");constinit=()=>{console.log(chalk.green(figlet.textSync("NodeJSCLI",{font:"Ghost",horizo??ntalLayout:"default",verticalLayout:"default"})));};constaskQuestions=()=>{const问题=[{名称:"FILENAME",type:"input",message:"不带扩展名的文件名是什么?"},{type:"list",name:"EXTENSION",message:"文件扩展名是什么?",choices:[".rb",".js",".php",".css"],过滤器:函数(val){returnval.split(“。”)[1];}}];returninquirer.prompt(questions);};constcreateFile=(filename,extension)=>{constfilePath=`${process.cwd()}/${filename}.${extension}`shell.touch(filePath)复制代码;returnfilePath;};constsuccess=filepath=>{console.log(chalk.white.bgGreen.bold(`Done!Filecreatedat${filepath}`));};construn=async()=>{//显示脚本介绍init();//问问题constanswers=awaitaskQuestions();const{FILENAME,EXTENSION}=答案;//创建文件constfilePath=createFile(FILENA我,分机);//显示成功消息success(filePath);};run();使用此脚本要在其他地方执行此脚本,请将bin部分添加到package.json文件并执行npmlink:{"name":"creator","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo\"错误:没有指定测试\"&&exit1","start":"nodeindex.js"},"author":"","license":"ISC","dependencies":{"chalk":"^2.4.1","figlet":"^1.2.0","inquirer":"^6.0.0","shelljs":"^0.8.2"},"bin":{"creator":"./index.js"}}执行npmlink使这个脚本在任何地方都可用这是运行这个命令时发生的情况。/usr/bin/creator->/usr/lib/node_modules/creator/index.js/usr/lib/node_modules/creator->/home/hugo/code/creator这会将index.js作为可执行文件链接。这是完全可能的,因为此CLI脚本的第一行是#!/usr/bin/envnode。现在我们可以通过执行以下命令来调用它。$creator总结如您所见,Node.js使构建良好的命令行工具变得非常容易。如果您想了解更多信息,请查看以下软件包。meow:一个简单的命令行帮助工具yargs:一个命令行参数解析工具pkg:将您的Node.js程序包装在一个可执行文件中。在评论中留下您构建命令行工具的经验!
