我们每天都使用CLI程序(如Terminal、cmd、Powershell等)进行软件开发。您使用的每个工具本质上都是其他软件工程师的产品,我们也可以制作自己的CLI工具。从零开始的简单CLI,让我们开始吧!首先我们做一个简单的CLI工具,会打印“HelloWord”做一个CLI需要做两个文件package.json:指定设置和配置入口index.js:根据CLI命令的可执行文件添加Package.json文件//package.json{"name":"my-cli","version":"0.0.1","description":"nodejscliprogram","main":"index.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"author":"Dunizb","license":"ISC"}在package.json中,指定相关的Metadata当前CLI程序的名称、版本、描述、作者等。创建index.js可执行文件//index.js#!/usr/bin/envnodeconsole.log('HelloCLI');那么,第一句话是什么意思呢?在Linux和基于Unix的操作系统(例如Mac)上,#!/usr/bin/env节点不仅仅是注释。它使用/usr/bin/env中注册的节点命令来运行该文件。但是,在Windows中,这只是一个注释。添加bin属性我们添加bin属性来实际运行index.js文件//package.json{"name":"my-cli","version":"0.0.1",......"license":"ISC","bin":{"cli":"./index.js"}}bin属性有可执行文件,cli命令需要index.js文件才能运行。运行CLI最后,让我们运行CLI以在控制台上打印HelloCLI。通过运行npmi-g在package.json中安装配置。下次您在控制台上运行npmi-g时,您将更新1个包...而不是添加1个包...。然后运行??cli命令。最后,你好CLI!您可能需要在Mac和Linux环境中附加sudo命令(即sudocli),没有node_modules文件夹,因为您没有安装依赖项。CLI中的Process.argv//index.js#!/usr/bin/envnodeconsole.log('HelloCLI',process.argv);您可以使用process.argv查找命令中的选项,选项显示为array。您不需要在每次更新index.js代码时再次运行npmi-g,因为您已经将package.json的bin属性连接到cli命令和index.js文件。所以每次调用cli命令时,index.js文件都可以执行(不是从缓存中,所以可以运行新更新的内容)。在终端中运行命令:cli一二三四结果数组中的前两个元素是节点和cli命令的路径。(对于Windows系统,它可能会打印不同的输出)输出可能会因您的计算机设置和环境而异(这取决于您在计算机上安装节点和cli命令的位置)。此外,一二三四表示为数组类型其次,一个简单的CLI工具通过“用户输入”与用户交互,使用名为readline的本机Node模块从用户那里获取输入。//index.js#!/usr/bin/envnodeconstreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout,});rl.question(“你今天好吗(快乐,悲伤)?”,(回答)=>{if(回答===“快乐”){console.log(“我很高兴听到这个消息”);}elseif(回答==="Sad"){console.log("Hopeyoufeelbettertomorrow")}else{console.log("Areyouhappyorsad?");}rl.close();});您可以使用readline模块中的createInterface方法创建一个rl对象。process.stdin和process.stdout是控制台输入和输出流。readline模块接受用户输入,rl对象question方法是向用户提问的方式,回调函数有一个answer参数(用户输入),如果所有I/O(输入输出)完成,rl对象被关闭。在这种情况下,我们是否可以通过再次询问用户是否既不回答“快乐”也不回答“悲伤”来进一步改进CLI?再次询问用户时,他们是否回答错误#!/usr/bin/envnodeconstreadline=require('readline');constrl=readline.createInterface({输入:process.stdin,输出:process.stdout,});控制台.clear();constanswerCallback=(answer)=>{if(answer==="Happy"){console.log("我很高兴听到这个消息");rl.close();}elseif(answer==="Sad"){console.log("Hopeyoufeelbettertomorrow");rl.close();}else{console.log("你是快乐还是悲伤?");rl.question("你今天好吗(开心,难过)?",answerCallback);}};rl。question("你今天好吗(开心,难过)?",answerCallback);当程序开始使用console.Clear时清除控制台,然后使用rl.question方法要求用户输入并使用answerCallback函数获取答案。如果答案既不悲伤也不快乐,则清空控制台,然后递归地再次询问,如果答案是悲伤或快乐,则关闭输入控制台。最后,在本文中,我们实践了一种制作需要用户输入的简单CLI工具的方法。希望你喜欢阅读。可以在高级CLI博客上找到更高级和实用的示例。文章首发《前端外文精选》微信公众号继续阅读其他好评文章2020年12篇Vue.js开发技巧【小技巧】CSS如何实现文本对齐?7道简单但有技巧的JavaScript面试题,让你2020年成为前端高手。9个项目【实战】Vue。上)【笔记】Web全栈工程师的自我修养(下)【小贴士】如何防止H5页面弹出手机虚拟键盘?拒绝JavaScript,这三个CSS技巧你一定要用好ChromeDevTools的7个隐藏功能,可以提高你的工作效率【图文教程】同步你的VSCode设置和扩展插件,换手机不用愁更多...
