利用节点。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怎么对命令行参数进行解析