命令行工具,即Cli(命令行界面)。它是图形用户界面普及之前使用最广泛的用户界面。它通常不支持鼠标。用户通过键盘输入指令,计算机收到指令后执行。在学习本教程之前,您需要了解NodeJs、NPM和一些常用的shell命令!对于前端开发者来说,使用NodeJs开发命令行工具是最方便快捷的。借助npm可以方便的进行调试和发布。NodeJs的命令行用法如下图所示:那么如何从头开始写一个命令行工具呢?1.创建一个新项目首先,我们创建一个npm项目。$mkdircli-demo$cdcli-demo$npminit通过以上步骤,我们新建了一个cli-demo文件夹,并在cli-demo文件夹中初始化了一个package.json文件。package.json的内容大致是这样的:{"name":"cli-demo","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"author":"","license":"MIT"}2.创建一个新的可执行文件。我们在cli-demo文件夹下,新建一个js文件,这里我们新建一个文件,命名为cli.js。我们在编写命令行工具时,需要指定一个可执行文件。在package.json中,bin字段用于映射命令名称和可执行文件。通过npminstall-g进行全局安装时,npm会将可执行文件符号链接到prefix/bin文件夹。如果通过npminstall在本地安装,npm会将可执行文件符号链接到./node_modules/.bin/文件夹。(完整的字段说明在这里:https://docs.npmjs.com/files/...如何将js文件制作成可执行文件?只要在js文件头部添加一行代码:#!/usr/bin/env节点对cli.js略作改进,如下:#!/usr/bin/envnodeconsole.log('Helloworld!');3.指定cli.js为执行文件,我们需要添加在package.json中,指定bin字段使用cli.js作为我们的执行文件。{"bin":"cli.js"}或者:{"bin":{"cli-demo":"cli.js"}}四、调试我们在全局安装了一个cli包之后,就可以在全局调用这个命令行工具了,那么我们在开发调试的时候就需要用到npmlink命令,在npm包文件夹下执行npmlink命令会创建一个symboliclink.将全局文件夹{prefix}/lib/node_modules/链接到你执行npmlink的package文件夹注意:package-name是package.json中的名字,不是文件夹名,详细解释在这里:https://docs.npmjs.com/cli/link我们在cli-demo文件夹下执行npmlink命令后,就可以全局使用cli-demo命令了。$cli-demo世界你好!5、使用命令行辅助工具我们在编写命令行工具的时候,使用一些辅助工具会让我们的开发效率更高。下面是我用过的一些辅助工具:Commander.js-帮助参数解析,我用的最多的是optionator-帮助参数解析,Eslint用的是Inquirer.js-常用交互式命令行chalk-命令行输出自定义颜色修改我们的cli.js,使用Commander.js做一些更复杂的操作。首先,安装commander.js:npmicommandercli.js代码:#!/usr/bin/envnodeconstprogram=require('commander');program.version('0.1.0').option('-n,--yourname[你的名字]','你的名字').option('-g,--glad','告诉我们你很开心').parse(process.argv);if(program.yourname){console.log(`Hello,${program.yourname}!${program.glad?'Iamveryhappytoseeyou!':''}`);}在命令行中使用:$cli-demo-hUsage:cli-demo[options]Options:-V,--version输出版本号-n,--yourname[yourname]你的名字-g,--glad告诉我们你开心-h,--help输出使用信息$cli-demo-nJayHello,Jay!$cli-demo-nJay-gHello,Jay!我很高兴见到你!6.发布一个简单的发布包到npm非常简单,只需要一个命令:npmpublish但一个完整规范的发布流程不仅如此,还需要考虑版本号规范(Semver)等一系列因素、提交消息规范和标记。如果手动的话,很麻烦。这里推荐使用relix,一步到位!npmirelix-g进入cli-demo文件夹,然后:relix--patch会自动为你生成新的版本号,生成提交信息,tag,将提交和tag推送到github,发布npm包!relix的详细使用方法,请参考relix文档。本章结束。进阶阅读:如何写一个工具告诉你npm包名是否被占用我的Github:https://github.com/PengJiyuan