Node.js 中如何收集和解析命令行参数 | 您所在的位置:网站首页 › cs4n65参数 › Node.js 中如何收集和解析命令行参数 |
前言
在开发 CLI(Command Line Interface)工具的业务场景下,离不开命令行参数的收集和解析。 接下来,本文介绍如何收集和解析命令行参数。 收集命令行参数在 Node.js 中,可以通过 process.argv 属性收集进程被启动时传入的命令行参数: // ./example/demo.js process.argv.slice(2); // 命令行执行如下命令 node ./example/demo.js --name=xiaoming --age=20 man // 得到的结果 [ '--name=xiaoming', '--age=20', 'man' ] 复制代码由上述示例可以发现,Node.js 在处理命令行参数时,只是简单地通过空格来分割字符串。 对于这样的参数数组,无法很方便地获取到每个参数对应的值,所以需要再进行一次解析操作。 命令行参数风格在解析命令行参数之前,需要了解一些常见的命令行参数风格: Unix 风格:参数以「-」(连字符)开头GNU 风格:参数以「--」(双连字符)开头BSD 风格:参数以空格分割Unix 参数风格有一个特殊的注意事项:「「-」后面紧邻的每一个字母都表示一个参数名」。 ls -al 复制代码上述命令用来显示当前目录下所有的文件、文件夹并且显示它们的详细信息,等同于: ls -a -l 复制代码GNU 风格的参数以 「--」开头,一般后面会跟上一个单词或者短语,例如熟悉的 npm 安装依赖的命令: npm install --save koa 复制代码对于两个单词的情况,在 GNU 参数风格中,会通过「-」来连接,例如 npm 安装仅用于开发环境的依赖: npm install --save-dev webpack 复制代码BSD 是加州大学伯克利分校开发的一个 Unix 版本。其与 Unix 的区别主要在于参数前面没有 「-」,个人感觉这样很难区别参数和参数值。 ❝注意事项:-- 后面紧邻空格时,表示后面的字符串不需要解析。 ❞ 解析命令行参数 function parse(args = []) { // _ 属性用来保留不需要处理的参数字符串 const output = { _: [] }; for (let index = 0; index minimist(args)) .add('mri ', () => mri(args)) .add('nopt ', () => nopt(args)) .add('yargs-parser ', () => yargs(args)) .on('cycle', e => console.log(String(e.target))) .run(); 复制代码本文的内容主要参考解析效率最高的 mri 库的源码,感兴趣的同学可以学习其源码实现。(顺便吐槽一下:嵌套三元操作符可读性真的很差。。) 虽然上述基准测试中 minimist 效率并不很好,但是其覆盖了比较全的参数输入场景。(以上测试用例覆盖的场景有限) 写在最后最后,「如果本文对您有帮助,欢迎关注(公众号【漫谈大前端】)、点赞、转发 ε=ε=ε=┏(゜ロ゜;)┛。」 |
CopyRight 2018-2019 实验室设备网 版权所有 |