$node server.js文件夹
$节点-h 用法:node[options]script.js[arguments]
$node server.js文件夹
$节点-h 用法:node[options]script.js[arguments]
处理argv 是包含命令行参数的数组。 第一个元素是“node”,第二个元素是JavaScript文件的名称。 接下来的元素是任何其他命令行参数。
//打印过程.argv process.argv.forEach(函数(val、索引、数组){ console.log(索引+':'+val); });
$node process-2js one two=三四 0:节点 1:/Users/mjr/work/node/process-2.js 2:一个 3:2=3 4:四
节点[选项][-e脚本|脚本.js][参数]
节点调试脚本.js[参数]
节点--和声脚本.js balala
节点--无分隔--启用-ssl2 script.js balala
var args=进程.argv.slice(2);
for(let i=2;i<argv.length;i++){switch(argv[i]){case“--foo”:foo=argv[++i];break;case“-->bar”:bar=argv++i>;bread;default:throw new Error(“unknown arg”);}}
参数
最小主义者
require(“最小”)(process.argv.slice(2))
var argv=需要('minimist')(process.argv.slice(2)); 控制台.dir(argv);
$node示例/parse.js-a beep-b boop {_:[],a:“哔”,b:“嘘”}
$node示例/parse.js-x 3-y 4-n5-abc--beep=boop foo bar baz {_:[“foo”,“bar”,“baz”], x: 3、, y: 4、, n: 第5页, a: 是的, b: 是的, c: 是的, 哔哔声:“boop”}
进程argv.切片(2)
const args=进程argv; 控制台.log(args);
$node-server.js一个二=三个四 ['node','/home/server.js','one','two=three','four']
常量getArgs=()=> process.argv.reduce((args,arg)=>{ //长arg if(参数切片(0,2)===“--”){ const longArg=arg.split(“=”); const longArgFlag=longArg[0].slice(2); const longArgValue=longArg.length>1? longArg[1]:true; args[longArgFlag]=longArg值; } //旗帜 else if(arg[0]===“-”){ 常量标志=arg.slice(1).split(“”); flags.forEach((flag)=>{ args[flag]=true; }); } 返回参数; }, {}); const args=获取参数(); 控制台.log(args);
节点test.js-D--名称=您好
{D:true,名称:“你好”}
节点配置/build.js-lHRs--ip=$HOST--port=$port--env=dev
{ l: 是的, H: 是的, R: 是的, s: 是的, ip:“127.0.0.1”, 端口:'8080', env:“开发” }
$node yourscript.js香蕉猴 var program_name=进程.argv[0]// 值将为“节点” var script_path=进程.argv[1]// 值为“yourscript.js” var first_value=进程.argv[2]// 价值将是“香蕉” var second_value=进程.argv[3]// 值将为“monkey”
var stdio=要求('stdio'); var ops=标准io.getopt({ “check”:{key:“c”,args:2,description:“此选项的含义”}, “map”:{键:“m”,描述:“另一个描述”}, “kaka”:{参数:1,必需:true}, “ooo”:{键:“o”} });
节点<your_script.js>-c 23 45--map-k 23 file1 file2
{检查:[“23”,“45”], 参数:[“file1”,“file2”], 映射:true, 卡卡:'23'}
if(ops.kaka和ops.check){ console.log(ops.kaka+ops.check[0]); }
用法:node something.js[--check<ARG1><ARG2>][--kaka][--ooo][--map] -c、 --检查<ARG1><ARG2>此选项的含义(强制) -k、 --卡卡(强制) --映射另一个描述 -o、 --哦
npm安装stdio
节点myScript.js Sean Worthington
var firstName=进程.argv[2];// 将设置为“Sean” var lastName=进程.argv[3];// 将设置为“沃辛顿”
const进程=require(“进程”); const argv=键=>{ //如果键存在且值未定义,则返回true if(process.argv.includes(`-${key}`))返回true; const值=process.argv.find(element=>element.startsWith(`--${key}=`)); //如果键不存在且值未定义,则返回null if(!value)返回null; return value.replace(`--${key}=`,''); }
节点app.js
argv(“oo”)
无效的
节点app.js—foo
argv(“oo”)
真的
节点app.js—foo=
argv('fo')
''
节点app.js--foo=bar
argv(“oo”)
“bar”
$example--verbose--timeout=1000--src one.js--src two.js $example--verbose--timeout 1000--src one.js two.js $example-vt 1000--src one.js two.js $示例-vt 1000 one.js two.js
const选项定义=[ {name:“verbose”,别名:“v”,类型:Boolean}, {name:'src',type:String,multiple:true,defaultOption:true}, {名称:'timeout',别名:'t',类型:数字} ]
const commandLineArgs=require('command-line-args') const options=commandLineArgs(optionDefinitions)
{ 源代码:[ “one.js”, “两个.js” ], verbose:true, 超时:1000 }
$可执行文件<命令>[选项]
$git commit--squash-m“这是我的提交消息”
$executable<命令>[选项]<子命令>[选项]
$docker运行--detached--image centos bash-c yum install-y httpd
const args=进程argv .切片(2) .map(arg=>arg.split('=')) .reduce((args,[value,key])=>{ args[value]=键; 返回参数; }, {}); 控制台.log(args.foo) 控制台.log(args.fizz)
$node test.js foo=bar fizz=buzz 酒吧 嗡嗡声
#!/ usr/bin/env节点 var argv=需要('yargs').argv; 控制台.log(“(%d,%d)”,argv.x,argv.j); 控制台日志(argv._);
$ ./ nonopt.js-x6.82-y3.35朗姆酒 (6.82,3.35) [“朗姆酒”] $ ./ nonopt.js“我的心”-x 0.54岁-y 1.12岁 (0.54,1.12) [‘我的心’,‘哟’,‘呵呵’]
for(var i=0;i<process.argv.length;i++){ 控制台.log(进程.argv[i]); }
节点程序应用程序.js“arg1”“arg2”“arg3”
0“C:\\Program Files\\nodejs\\node.exe” 1'C:\\Users\\Nouman\\Desktop\\Node\\camer nodejs\\proj.js' 2“arg1”是您通过的第一个参数。 3“arg2”您传递的第二个参数。 4“arg3”是您传递的第三个参数。
C: \程序文件\ nodejs\ node.exe
项目.js
参数1
参数2
参数3
const args=进程.argv.slice(2).reduce((acc,arg)=>{ 让[k,v=true]=arg.split('=') acc[k]=v 返回acc }, {})
console.log(args)//{计数:“2”,打印:true,调试:“false”,消息:“hi”}
让[k,v=true]=arg.split('=') acc[k]=v
让[k,v]=参数分割('=') acc[k]=v===未定义? true:/true|false/.test(v)? v===“真”:/[\d|\.]+/.test(v)? 编号(v):v
console.log(args)//{count:2,打印:true,调试:false,消息:hi}
常数argv=(()=>{ 常量参数={}; process.argv.slice(2).map((元素)=>{ 常量匹配=元素匹配('--([a-zA-Z0-9]+)=(.*)'); if(匹配){ arguments[matches[1]=匹配[2] .replace(/^['“]/,'').replate(/[”“]$/,''”); } }); 返回参数; })();
节点app.js--name=stackoverflow--id=10另一个参数--text=“Hello World”
{ 名称:“stackoverflow”, id:“10”, text:“你好,世界” }
const{parseArgs}=require('node:util'); const args=进程argv; 常量选项={ foo:{ type:'布尔', 短:'f' }, 巴:{ type:'string' } }; 常数{ 值, 位置 }=parseArgs({args,options,allowPositionals:true}); console.log(值); 控制台.log(位置);
$node parseargs.js-f--条b [对象:空原型]{foo:true,bar:'b'} [ “/Users/mbelsky/.nvm/versions/node/v18.12.1/bin/node”, '/Users/mbelsky/parseargs.js' ]
const{argv}=require(“进程”)
$node process-args.js one two=三四
argv[0]=/usr/bin/节点 argv[1]=/home/user/process-args.js argv[2]=一个 argv[3]=二=三 argv[4]=四
$节点args.js arg1 arg2
console.log(进程.argv)
['node','args.js','arg1','arg2']
npm安装ps-grab
node greeting.js--用户Abdennour--网站 http://abdennoor.com
var grab=require('ps-grab); grab('--username')//return'Abdennour' 抓取('--action')//返回' http://abdennoor.com '
节点vbox.js-OS redhat-VM模板-12332;
var grab=require('ps-grab); grab(“-OS”)//返回“redhat” grab('-VM')//返回'template-12332'
module.exports=函数(requiredArguments){ var参数={}; for(var索引=0;索引<process.argv.length;索引++){ var re=新RegExp('--([A-Za-z0-9_]+)=([A/-Za-zO-9_]+'), matches=re.exec(进程.argv[索引]); if(匹配!==空){ arguments[匹配项[1]]=匹配项[2]; } } for(var index=0;index<requiredArguments.length;index++){ if(参数[requiredArguments[index]]===未定义){ throw(requiredArguments[index]+'未定义。请使用--'+requiredParguments[index]添加参数); } } 返回参数; }
var arguments=require('./parse-cli-arguments')(['foo','bar','xpto']);
var系统=要求(“系统”); 变量args={}; system.args.map(函数(x){return x.split(“=”)}) .map(函数(y){args[y[0]]=y[1]});
注意:您应该使用命名参数,如
文件.js x=1 y=2 使用 这个解决方案。
const args=进程.argv.slice(2).reduce((acc,arg,cur,arr)=>{ if(参数匹配(/^--/)){ acc[arg.substring(2)]=真 acc['_lastkey']=参数子字符串(2) }其他 if(参数匹配(/^-[^-]/)){ for(arg.substring(1).split(“”)的键){ acc[key]=真 acc['_lastkey']=键 } }其他 if(acc['_lastkey']){ acc[acc['_lastkey']]=参数 删除acc['_lastkey'] }其他 acc[arg]=真 如果(cur==arr.length-1) 删除acc['_lastkey'] 返回acc },{})
参数={ “阿尔法”:正确, “beta”:正确, “c”:正确, “h”:正确, “a”:正确, “r”:真 “l”:正确, “i”:没错, “e”:“delta”, “echo”:“foxtrot” }
npm i码 const-yargs=要求(“yargs”); 常量argv=yargs.argv; 控制台.log(argv);
接口IParams{ [key:string]:string } 函数parseCliParams():IParams{ 常量参数:IParams={}; const rawArgs=进程.argv.slice(2,进程.argv-length); rawArgs.forEach((arg:string,index)=>{ //带“--”标志的长参数: if(arg.sice(0,2).includes('-')){ const longArgKey=arg.slice(2,arg.length); const longArgValue=rawArgs[索引+1];// 下一个值,例如:--connection connection_name args[longArgKey]=longArg值; } //带有“-”标志的快照参数: else if(arg.slice(0,1).includes('-')){ const longArgKey=arg.slice(1,arg.length); const longArgValue=rawArgs[索引+1];// 下一个值,例如:-c connection_name args[longArgKey]=longArg值; } }); 返回参数; } const参数=parseCliParams(); console.log('params:',params);
常量args=进程.argv .切片(2) .map((val,i)=>{ 让对象={}; 让[regexForProp,regexForVal]=(()=>[new RegExp('^(.+?)='),new RegExp('\=(.*)')])(); let[prop,value]=(()=>[regexForProp.exec(val),regexForVal.exec[val)])(); if(!道具){ 对象[val]=true; 返回对象; }其他{ object[prop[1]=值[1]; 回波信号 } }) .reduce((对象,项)=>{ let prop=Object.keys(item)[0]; obj[prop]=项目[prop]; 返回对象; }, {});
节点index.js主机= http://google.com 端口=8080生产
控制台.log(args)// {主机:' http://google.com ',端口:'8080',生产:true} console.log(args.host)// http://google.com console.log(args.port)// 8080 console.log(args.production)// 真的
'使用严格'; for(设j=0;j<process.argv.length;j++){ 控制台.log(j+'->'+(process.argv[j])); }
console.log(ArgumentParser(`--debug--msg=“Hello World”--title=“Test”--desc=demo-open--level=5--MyFloat=3.14`))
{ “调试”:true, “msg”:“你好,世界”, “title”:“测试”, “desc”:“演示”, “打开”:true, “级别”:5, “MyFloat”:3.14 }
// 👇 下面是测试 (() => { window.onload=()=>{ const测试数组=[ `--debug--msg=“Hello World”--title=“Test”--desc=demo-open--level=5--MyFloat=3.14`, ] for(testArray的const testData){ 尝试{ const obj=参数分析器(testData) 控制台.log(obj) }捕捉(e){ 控制台错误(e.message) } } } })() // 👇 脚本 类ParserError扩展错误{ } 函数光标(str,pos){ this.str=字符串 this.pos=位置 这个。 向右移动=(步长=1)=>{ this.pos+=步骤 } 这个。 移动到下一个Para=()=>{ const curStr=this.str.substring(this.pos) 常量匹配=/^(?<全部>*--?(?<名称>[a-zA-Z_][a-zA-Z0-9_]*)(=(?<值>[^-]*)?)/ g.exec(curStr)// https://regex101.com/r/k004Gv/2 if(匹配){ 让{groups:{all,name,value}}=match if(值!==未定义){ value=value.trim() if(value.slice(0,1)===“”){//string if(value.slice(-1)!==' "') { throw new ParserError(应为“Parsing error:”“”) } value=value.slice(1,-1) }else{//数字或字符串(不带“”) value=isNaN(数字(值))? 字符串(值):数字(值) } } 这个。 向右移动(全部长度) return[name,value??true]//如果值未定义,则将其设置为true。 } 抛出新的ParserError(`检测到非法格式。${curStr}`) } } 函数ArgumentParser(str){ 常量obj={} 常量光标=新光标(str,0) 而(1){ const[name,value]=光标。 移至下一段落() obj[名称]=值 if(cursor.pos===str.length){ 返回对象 } } }