利用节点。js怎么对命令行参数进行解析

  介绍

利用节点。js怎么对命令行参数进行解析?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

收集命令行参数

在节点。js中,可以通过过程。argv属性收集进程被启动时传入的命令行参数:

,//,//demo.js例子   ,process.argv.slice (2);      ,//命令行执行如下命令   node 。/例子/demo.js  - name=xiaoming ——年龄=20人      ,//得到的结果   ,(& # 39;- name=小明# 39;,,& # 39;——年龄=20 & # 39;,,& # 39;男人# 39;,]

由上述示例可以发现,节点。js在处理命令行参数时,只是简单地通过空格来分割字符串。

对于这样的参数数组,无法很方便地获取到每个参数对应的值,所以需要再进行一次解析操作。

命令行参数风格

在解析命令行参数之前,需要了解一些常见的命令行参数风格:

<李>

Unix风格:参数以“-”(连字符)开头

<李>

GNU风格:参数以“——”(双连字符)开头

<李>

BSD风格:参数以空格分割

Unix参数风格有一个特殊的注意事项:”“-”后面紧邻的每一个字母都表示一个参数名”。

ls 状态”

上述命令用来显示当前目录下所有的文件,文件夹并且显示它们的详细信息,等同于:

ls  -a  - l

GNU风格的参数以”——“开头,一般后面会跟上一个单词或者短语,例如熟悉的npm安装依赖的命令:

, npm  install ,,节省高雅

对于两个单词的情况,在GNU参数风格中,会通过”——“来连接,例如npm安装仅用于开发环境的依赖:

npm  install ——save-dev  webpack

BSD是加州大学伯克利分校开发的一个Unix版本。其与Unix的区别主要在于参数前面没有“-”,个人感觉这样很难区别参数和参数值。

注意事项:——后面紧邻空格时,表示后面的字符串不需要解析。

解析命令行参数

function 解析(=args  []), {   ,//_ 属性用来保留不需要处理的参数字符串   ,const  output =, {, _: [],};      ,for  (let  index =, 0;, index  & lt;, args.length;,指数+ +),{   const 才能;arg =, args(指数);   ,,   if 才能;(isIgnoreFollowingParameters(输出,参数,,指数,arg)), {   ,才能打破;   ,,}   ,,   if 才能;(! isParameter (arg)), {   ,,output._.push (arg);   ,才能继续;   ,,}      ,,…   ,}      ,return 产量;   }      解析(process.argv.slice (2));

接收到命令行参数数组之后,需要遍历数组,处理每一个参数字符串。

isIgnoreFollowingParameters方法主要用来判断单个”——“的场景,后续的参数字符串不再需要处理:

function  isIgnoreFollowingParameters(输出,参数,,指数,arg), {   ,if  (arg  !==, & # 39;——& # 39;), {   return 才能;假;   ,}=,,output._  output._.concat (args.slice指数(+ +);   ,return 真实;   }

接下来,如果参数字符串不以”——“开头,同样也不需要处理,参数的形式以Unix和GNU风格为主:

function  isParameter (arg), {   ,return  arg.startsWith (& # 39; & # 39;);   }

参数的表现形式主要分为以下几种:

<李>

“——name=xiaoming":参数名为名字,参数值为小明

<李>

“abc=10“:参数名为a,参数值为true;参数名为b,参数值为true;参数名为c,参数值为10

<李>

“——save-dev":参数名为save-dev,参数值为真

<李>

“——20岁“:参数名为年龄、参数值为20

, let  hyphensIndex;   ,for  (hyphensIndex =, 0;, hyphensIndex  & lt;, arg.length;, hyphensIndex + +), {   if 才能;(arg.charCodeAt (hyphensIndex), !==, 45), {   ,才能打破;   ,,}   ,}      ,let  assignmentIndex;   ,for  (assignmentIndex =, hyphensIndex  +, 1;, assignmentIndex  & lt;, arg.length;, assignmentIndex + +), {   if 才能;(arg (assignmentIndex) .charCodeAt (0),===, 61), {   ,才能打破;   ,,}   以前,}

利用Unicode码点值找出连字符和等号的下标值,从而根据下标分割出参数名和参数值:

利用节点。js怎么对命令行参数进行解析