Komut sat─▒r─▒ de─či┼čkenlerini bir Node.js program─▒na nas─▒l iletirim?


Al─▒nan cevaba git


Node.js ile yaz─▒lm─▒┼č bir web sunucum var ve belirli bir klas├Ârle ba┼člatmak istiyorum. JavaScriptÔÇÖte ba─č─▒ms─▒z de─či┼čkenlere nas─▒l eri┼čece─čimi bilmiyorum. D├╝─č├╝m├╝ ┼ču ┼čekilde ├žal─▒┼čt─▒r─▒yorum:

 $ node server.js folder
 

─░┼čte server.js sunucu kodum. Node.js yard─▒m─▒ bunun m├╝mk├╝n oldu─čunu s├Âyl├╝yor:

 $ node -h
Usage: node [options] script.js [arguments]
 

Bu ba─č─▒ms─▒z de─či┼čkenlere JavaScriptÔÇÖte nas─▒l eri┼čebilirim? Her nas─▒lsa bu bilgiyi web'de bulamad─▒m.


2247









Cevap say─▒s─▒n─▒ say: 30






Standart Y├Ântem (k├╝t├╝phane yok)

Arg├╝manlar i├žinde saklan─▒r process.argv

─░┼čte komut sat─▒r args i┼čleme d├╝─č├╝mleri args:

process.argv komut sat─▒r─▒ arg├╝manlar─▒n─▒ i├žeren bir dizidir. ─░lk eleman 'd├╝─č├╝m' olacak, ikinci eleman JavaScript dosyas─▒n─▒n ad─▒ olacakt─▒r. Bir sonraki elemanlar herhangi bir ek komut sat─▒r─▒ arg├╝man─▒ olacakt─▒r.

 // print process.argv
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});
 

Bu ├╝retecektir:

 $ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four
 

2885







Normal bir javascript i┼člevi gibi arg├╝manlar─▒ normalle┼čtirmek i├žin, bunu node.js kabuk komut dosyalar─▒mda yapar─▒m:

 var args = process.argv.slice(2);
 

─░lk arg├╝man─▒n genellikle d├╝─č├╝mlere giden yol oldu─čunu ve ikinci arg├╝man─▒n y├╝r├╝tmekte oldu─čunuz komut dosyas─▒n─▒n yeri oldu─čunu unutmay─▒n.


625







Minimist k├╝t├╝phaneyi kullanmas─▒ i├žin g├╝ncel do─čru cevap . Biz kullanmak i├žin kullan─▒lan d├╝─č├╝m-iyimser ama beri kald─▒r─▒lm─▒┼čt─▒r.https://www.npmjs.org/package/minimisthttps://github.com/substack/node-optimist%23deprecation-notice#deprecation-notice

Minimist dok├╝mantasyondan direkt olarak nas─▒l kullan─▒laca─č─▒na dair bir ├Ârnek:

 var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);
 

-

 $ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }
 

-

 $ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
  x: 3,
  y: 4,
  n: 5,
  a: true,
  b: true,
  c: true,
  beep: 'boop' }
 

325







Vah┼či do─čadaki mevcut e─čilimlere g├Âre 2018 cevap:


Vanilya javascript arg├╝man─▒ ayr─▒┼čt─▒rma:

 const args = process.argv;
console.log(args);
 

Bu d├Âner:

 $ node server.js one two=three four
['node', '/home/server.js', 'one', 'two=three', 'four']
 

Resmi dok├╝manlar


Arg├╝man ayr─▒┼čt─▒rma i├žin en ├žok kullan─▒lan NPM paketleri:

Minimist : Minimal arg├╝man ayr─▒┼čt─▒rma i├žin.

Commander.js : Arg├╝man ayr─▒┼čt─▒rma i├žin en ├žok kullan─▒lan mod├╝l.

Miyav : Commander.js'ye daha hafif bir alternatif

─░plikler : Daha karma┼č─▒k arg├╝man ayr─▒┼čt─▒rma (a─č─▒r).

Vorpal.js : Arg├╝man ayr─▒┼čt─▒rma ile olgun / etkile┼čimli komut sat─▒r─▒ uygulamalar─▒.


294







─░yimser (d├╝─č├╝m iyimser)

─░yimser k├╝t├╝phane g├Âz at─▒n , elle komut sat─▒r─▒ se├ženekleri ayr─▒┼čt─▒rma daha iyidir.

G├╝ncelle┼čtirme

─░yimser onaylanmad─▒. Aktif bir iyimser ├žatal─▒ olan iplikleri deneyin .


122


2011-07-04





Burada birka├ž b├╝y├╝k cevap, ama hepsi ├žok karma┼č─▒k g├Âr├╝n├╝yor. Bu, bash scriptlerinin arg├╝man de─čerlerine nas─▒l eri┼čti─čine ├žok benzer ve MooGoo'nun da belirtti─či gibi, zaten node.js ile standart olarak sunuluyor. (Sadece node.js dosyas─▒nda yeni olan birine anla┼č─▒labilir hale getirmek i├žin)

├ľrnek:

 $ node yourscript.js banana monkey

var program_name = process.argv[0]; //value will be "node"
var script_path = process.argv[1]; //value will be "yourscript.js"
var first_value = process.argv[2]; //value will be "banana"
var second_value = process.argv[3]; //value will be "monkey"
 

91







Commander.js

Se├ženeklerinizi, eylemlerinizi ve arg├╝manlar─▒n─▒z─▒ tan─▒mlamak i├žin harikad─▒r. Ayn─▒ zamanda sizin i├žin yard─▒m sayfalar─▒n─▒ olu┼čturur.

Derhal

Geri arama yakla┼č─▒m─▒n─▒ be─čenirseniz, kullan─▒c─▒dan giri┼č elde etmek i├žin harika ├žal─▒┼č─▒r.

E┼č ─░stemi

Jenerat├Âr yakla┼č─▒m─▒n─▒ isterseniz, kullan─▒c─▒dan girdi almak i├žin harika ├žal─▒┼č─▒r.


79







Stdio K├╝t├╝phanesi

NodeJS'deki komut sat─▒r─▒ arg├╝manlar─▒n─▒ ├ž├Âz├╝mlemenin en kolay yolu stdio mod├╝l├╝n├╝ kullanmakt─▒r. UNIX getopt yard─▒mc─▒ program─▒ndan esinlenerek a┼ča─č─▒daki gibi ├Ânemsiz:

 var stdio = require('stdio');
var ops = stdio.getopt({
    'check': {key: 'c', args: 2, description: 'What this option means'},
    'map': {key: 'm', description: 'Another description'},
    'kaka': {args: 1, mandatory: true},
    'ooo': {key: 'o'}
});
 

├ľnceki kodu bu komutla ├žal─▒┼čt─▒r─▒rsan─▒z:

 node <your_script.js> -c 23 45 --map -k 23 file1 file2
 

Sonra ops nesne a┼ča─č─▒daki gibi olacakt─▒r:

 { check: [ '23', '45' ],
  args: [ 'file1', 'file2' ],
  map: true,
  kaka: '23' }
 

B├Âylece istedi─činiz gibi kullanabilirsiniz. ├ľrne─čin:

 if (ops.kaka && ops.check) {
    console.log(ops.kaka + ops.check[0]);
}
 

Grupland─▒r─▒lm─▒┼č se├ženekler de desteklenir, -om bunun yerine yazabilirsiniz -o -m .

Ayr─▒ca stdio otomatik olarak bir yard─▒m / kullan─▒m ├ž─▒kt─▒s─▒ olu┼čturabilir. E─čer ararsan─▒z ops.printHelp() a┼ča─č─▒dakileri al─▒rs─▒n─▒z:

 USAGE: node something.js [--check <ARG1> <ARG2>] [--kaka] [--ooo] [--map]
  -c, --check <ARG1> <ARG2>   What this option means (mandatory)
  -k, --kaka                  (mandatory)
  --map                       Another description
  -o, --ooo
 

Bir ├Ânceki se├ženek, zorunlu bir se├ženek verilmedi─činde (hata mesaj─▒ndan ├Ânce) veya yanl─▒┼č tan─▒mlanm─▒┼čsa (├Ârne─čin, bir se├ženek i├žin tek bir arg├╝man belirtirseniz ve 2'ye ihtiya├ž duyarsa) de g├Âsterilir.

Stdio mod├╝l├╝n├╝ NPM kullanarak kurabilirsiniz :

 npm install stdio
 

45







Komut dosyan─▒z myScript.js olarak adland─▒r─▒lm─▒┼čsa ve ad─▒n─▒z─▒ ve soyad─▒n─▒z─▒, 'Sean Worthington'─▒, a┼ča─č─▒daki gibi arg├╝manlar olarak iletmek istiyorsan─▒z:

 node myScript.js Sean Worthington
 

Sonra senaryonun i├žine yaz.

 var firstName = process.argv[2]; // Will be set to 'Sean'
var lastName = process.argv[3]; // Will be set to 'Worthington'
 

45







Bayraklar─▒ Basit Bir Nesneye Bi├žimlendirilmi┼č Lib Yok

 function getArgs () {
    const args = {};
    process.argv
        .slice(2, process.argv.length)
        .forEach( arg => {
        // long arg
        if (arg.slice(0,2) === '--') {
            const longArg = arg.split('=');
            const longArgFlag = longArg[0].slice(2,longArg[0].length);
            const longArgValue = longArg.length > 1 ? longArg[1] : true;
            args[longArgFlag] = longArgValue;
        }
        // flags
        else if (arg[0] === '-') {
            const flags = arg.slice(1,arg.length).split('');
            flags.forEach(flag => {
            args[flag] = true;
            });
        }
    });
    return args;
}
const args = getArgs();
console.log(args);
 

├ľrnekler

Basit

giri┼č

 node test.js -D --name=Hello
 

├ž─▒kt─▒

 { D: true, name: 'Hello' }
 

Ger├žek d├╝nya

giri┼č

 node config/build.js -lHRs --ip=$HOST --port=$PORT --env=dev
 

├ž─▒kt─▒

 { 
  l: true,
  H: true,
  R: true,
  s: true,
  ip: '127.0.0.1',
  port: '8080',
  env: 'dev'
}
 

38







komut sat─▒r─▒-args bir g├Âz atmaya de─čer!

Ana g├Âsterim standartlar─▒n─▒ kullanarak se├ženekleri belirleyebilirsiniz ( daha fazla bilgi edinin ). Bu komutlar─▒n t├╝m├╝ ayn─▒ de─čerleri ayarlayarak e┼čde─čerdir:

 $ 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
$ example -vt 1000 one.js two.js
 

De─čerlere eri┼čmek i├žin ├Ânce uygulaman─▒z─▒n kabul etti─či se├ženekleri tan─▒mlayan bir se├ženek tan─▒mlar─▒ listesi olu┼čturun . type ├ľzelli─činiz al─▒nan de─čerin ├╝zerinde tam kontrol veren bir ayarlay─▒c─▒ i┼člevi (bu ge├žirilir verilen de─čer) vard─▒r.

 const optionDefinitions = [
  { name: 'verbose', alias: 'v', type: Boolean },
  { name: 'src', type: String, multiple: true, defaultOption: true },
  { name: 'timeout', alias: 't', type: Number }
]
 

Daha sonra commandLineArgs () kullanarak se├ženekleri ayr─▒┼čt─▒r─▒n :

 const commandLineArgs = require('command-line-args')
const options = commandLineArgs(optionDefinitions)
 

options ┼čimdi ┼čuna benziyor:

 {
  src: [
    'one.js',
    'two.js'
  ],
  verbose: true,
  timeout: 1000
}
 

Geli┼čmi┼č kullan─▒m

Yukar─▒daki tipik kullan─▒m─▒n yan─▒nda, daha geli┼čmi┼č s├Âzdizimi formlar─▒n─▒ kabul etmek i├žin komut sat─▒r─▒ arg├╝manlar─▒n─▒ yap─▒land─▒rabilirsiniz.

Komut tabanl─▒ s├Âzdizimi (git tarz─▒) formda:

 $ executable <command> [options]
 

├ľrne─čin.

 $ git commit --squash -m "This is my commit message"
 

Komut ve alt komut s├Âzdizimi (docker stili) formda:

 $ executable <command> [options] <sub-command> [options]
 

├ľrne─čin.

 $ docker run --detached --image centos bash -c yum install -y httpd
 

Kullan─▒m k─▒lavuzu nesil

Komut sat─▒r─▒ kullan─▒m─▒ --help kullan─▒larak bir kullan─▒m k─▒lavuzu (genellikle ayarland─▒─č─▒nda yazd─▒r─▒l─▒r ) olu┼čturulabilir . A┼ča─č─▒daki ├Ârneklere bak─▒n ve nas─▒l olu┼čturulaca─č─▒na ili┼čkin talimatlar i├žin belgeleri okuyun .https://github.com/75lb/command-line-usagehttps://github.com/75lb/command-line-usage

Tipik bir kullan─▒m k─▒lavuzu ├Ârne─či.


kullan─▒m

Polimer-cli kullan─▒m k─▒lavuzu iyi bir ger├žek ya┼čam ├Ârne─čidir.


kullan─▒m

Daha fazla okuma

├ľ─črenilecek daha ├žok ┼čey var, l├╝tfen ├Ârnekler ve belgeler i├žin wiki'ye bak─▒n .


27







Bunun i├žin bir uygulama var. Peki, mod├╝l. ┼×ey, birden fazla, muhtemelen y├╝zlerce.

─░plikler e─členceli olanlardan biridir, dok├╝man─▒ okumak iyidir.

─░┼čte github / npm sayfas─▒ndan bir ├Ârnek:

 #!/usr/bin/env node
var argv = require('yargs').argv;
console.log('(%d,%d)', argv.x, argv.y);
console.log(argv._);
 

├ç─▒kt─▒ burada (k─▒sa, uzun, say─▒sal vb. K─▒sa ├žizgiler vb. Olan se├ženekleri okur).

 $ ./nonopt.js -x 6.82 -y 3.35 rum
(6.82,3.35)
[ 'rum' ] 
$ ./nonopt.js "me hearties" -x 0.54 yo -y 1.12 ho
(0.54,1.12)
[ 'me hearties', 'yo', 'ho' ]
 

22







─░┼čte adland─▒r─▒lm─▒┼č arg├╝manlar i├žin benim 0 dep dep ├ž├Âz├╝m:

 const args = process.argv
    .slice(2)
    .map(arg => arg.split('='))
    .reduce((args, [value, key]) => {
        args[value] = key;
        return args;
    }, {});

console.log(args.foo)
console.log(args.fizz)
 

├ľrnek:

 $ node test.js foo=bar fizz=buzz
bar
buzz
 

Not: Arg├╝man a i├žerdi─činde do─čal olarak bu ba┼čar─▒s─▒z olur = . Bu sadece ├žok basit kullan─▒m i├žindir.


17







Yap─▒land─▒rman─▒z─▒ merkezi bir ┼čekilde nconf https://github.com/flatiron/nconf gibi bir ┼čey kullanarak y├Ânetmek iyi bir fikir olabilir.https://github.com/flatiron/nconf

Konfig├╝rasyon dosyalar─▒, ├ževre de─či┼čkenleri, komut sat─▒r─▒ arg├╝manlar─▒ ile ├žal─▒┼čman─▒za yard─▒mc─▒ olur.


11


2012-05-26





k├╝t├╝phaneler olmadan: Array.prototype.reduce () kullan─▒m─▒

 const args = process.argv.slice(2).reduce((acc, arg) => {

    let [k, v = true] = arg.split('=')
    acc[k] = v
    return acc

}, {})
 

bu komut i├žin node index.js count=2 print debug=false msg=hi

 console.log(args) // { count: '2', print: true, debug: 'false', msg: 'hi' }
 

Ayr─▒ca,

De─či┼čtirebiliriz

     let [k, v = true] = arg.split('=')
    acc[k] = v
 

taraf─▒ndan (├žok daha uzun)

     let [k, v] = arg.split('=')
    acc[k] = v === undefined ? true : /true|false/.test(v) ? v === 'true' : /[\d|\.]+/.test(v) ? Number(v) : v
 

ve Boolean ayr─▒┼čt─▒rmak i├žin nas─▒l

 console.log(args) // { count: 2, print: true, debug: false, msg: 'hi' }
 

11







Arg├╝manlar─▒n ayr─▒┼čt─▒r─▒lmas─▒, ayr─▒┼čt─▒r─▒lmas─▒ kolay bir i┼člemdir. D├╝─č├╝m, D├╝─č├╝m ├ža─čr─▒ld─▒─č─▒nda kullan─▒lan arg├╝manlar olan bir dizge dizisi olan process.argv ├Âzelli─čini sa─člar. Dizinin ilk giri┼či D├╝─č├╝m y├╝r├╝t├╝lebilir, ikinci girdi ise beti─činizin ad─▒d─▒r.

A┼ča─č─▒daki komutlar─▒ i├žeren komut dosyas─▒n─▒ ├žal─▒┼čt─▒r─▒rsan─▒z

 $ node args.js arg1 arg2
 

Dosya: args.js

 console.log(process.argv)
 

Gibi dizi alacaks─▒n─▒z

  ['node','args.js','arg1','arg2']
 

10







 npm install ps-grab
 

E─čer b├Âyle bir ┼čeyi ├žal─▒┼čt─▒rmak istiyorsan:

 node greeting.js --user Abdennour --website http://abdennoor.com 
 

-

 var grab=require('ps-grab');
grab('--username') // return 'Abdennour'
grab('--action') // return 'http://abdennoor.com'
 

Ya da ┼č├Âyle bir ┼čey:

 node vbox.js -OS redhat -VM template-12332 ;
 

-

 var grab=require('ps-grab');
grab('-OS') // return 'redhat'
grab('-VM') // return 'template-12332'
 

9







proj.js

 for(var i=0;i<process.argv.length;i++){
  console.log(process.argv[i]);
}
 

Terminal:

 nodemon app.js "arg1" "arg2" "arg3"
 

Sonu├ž:

 0 'C:\\Program Files\\nodejs\\node.exe'
1 'C:\\Users\\Nouman\\Desktop\\Node\\camer nodejs\\proj.js'
2 'arg1' your first argument you passed.
3 'arg2' your second argument you passed.
4 'arg3' your third argument you passed.
 

A├ž─▒klama:

0 : ─░┼čleminizdeki node.exe dizini (C: \ Program Files \ nodejs \ node.exe ')

1 : Proje dosyan─▒z─▒n dizini. (Proj.js)

2 : D├╝─č├╝mdeki ilk de─či┼čkeniniz (arg1)

3 : D├╝─č├╝m i├žin ikinci arg├╝man─▒n─▒z (arg2)

4 : D├╝─č├╝mdeki ├╝├ž├╝nc├╝ arg├╝man (arg3)

as─▒l arg├╝manlar─▒n─▒z dizinin form 2nd dizinini ba┼člat─▒r argv , yani process.argv[2] .


8







Kullanarak komut sat─▒r─▒ arg├╝manlar─▒na ula┼čabilirsiniz system.args . Arg├╝manlar─▒ bir nesneye ayr─▒┼čt─▒rmak i├žin a┼ča─č─▒daki ├ž├Âz├╝m├╝ kullan─▒yorum, b├Âylece hangisini isimle istersem alabilirim.

 var system = require('system');

var args = {};
system.args.map(function(x){return x.split("=")})
    .map(function(y){args[y[0]]=y[1]});
 

┼čimdi arg├╝man─▒n indeksini bilmenize gerek yok. gibi kullan args.whatever

Not: file.js x=1 y=2 Bu ├ž├Âz├╝m├╝ kullanmak gibi adland─▒r─▒lm─▒┼č de─či┼čkenleri kullanmal─▒s─▒n─▒z.


7







T├╝m arg├╝manlar─▒ ayr─▒┼čt─▒r─▒p var olup olmad─▒klar─▒n─▒ kontrol edebilirsiniz.

dosya: parse-cli-arguments.js:

 module.exports = function(requiredArguments){
    var arguments = {};

    for (var index = 0; index < process.argv.length; index++) {
        var re = new RegExp('--([A-Za-z0-9_]+)=([A/-Za-z0-9_]+)'),
            matches = re.exec(process.argv[index]);

        if(matches !== null) {
            arguments[matches[1]] = matches[2];
        }
    }

    for (var index = 0; index < requiredArguments.length; index++) {
        if (arguments[requiredArguments[index]] === undefined) {
            throw(requiredArguments[index] + ' not defined. Please add the argument with --' + requiredArguments[index]);
        }
    }

    return arguments;
}
 

Sadece yapmaktan:

 var arguments = require('./parse-cli-arguments')(['foo', 'bar', 'xpto']);
 

6







K├╝t├╝phaneler olmadan

Bunu vanilya JS / ES6'da yapmak istiyorsan─▒z, a┼ča─č─▒daki ├ž├Âz├╝m├╝ kullanabilirsiniz.

sadece NodeJS> 6ÔÇÖda ├žal─▒┼čt─▒

 const args = process.argv
  .slice(2)
  .map((val, i)=>{
    let object = {};
    let [regexForProp, regexForVal] = (() => [new RegExp('^(.+?)='), new RegExp('\=(.*)')] )();
    let [prop, value] = (() => [regexForProp.exec(val), regexForVal.exec(val)] )();
    if(!prop){
      object[val] = true;
      return object;
    } else {
      object[prop[1]] = value[1] ;
      return object
    }
  })
  .reduce((obj, item) => {
    let prop = Object.keys(item)[0];
    obj[prop] = item[prop];
    return obj;
  }, {});
 

Ve bu komut

 node index.js host=http://google.com port=8080 production
 

a┼ča─č─▒daki sonucu ├╝retecek

 console.log(args);//{ host:'http://google.com',port:'8080',production:true }
console.log(args.host);//http://google.com
console.log(args.port);//8080
console.log(args.production);//true
 

ps Daha ┼č─▒k bir ├ž├Âz├╝m bulursan─▒z, l├╝tfen haritadaki kodu d├╝zeltin ve i┼člevi azalt─▒n;)


4







Node.js dosyas─▒ndaki arg├╝manlar─▒ alman─▒n en basit yolu process.argv dizisidir. Bu, kullanmak i├žin herhangi bir ek kitapl─▒─č─▒ i├že aktarmadan kullanabilece─činiz genel bir nesnedir. Arg├╝manlar─▒, daha ├Ânce g├Âstermi┼č oldu─čumuz gibi bir Node.js uygulamas─▒na iletmeniz yeterlidir ve bu arg├╝manlara uygulama i├žinde process.argv dizisi arac─▒l─▒─č─▒yla eri┼čilebilir.

Process.argv dizisinin ilk eleman─▒ daima ├žal─▒┼čt─▒r─▒labilir d├╝─č├╝me i┼čaret eden bir dosya sistemi yolu olacakt─▒r. ─░kinci ├Â─če, y├╝r├╝t├╝lmekte olan JavaScript dosyas─▒n─▒n ad─▒d─▒r. ├ť├ž├╝nc├╝ unsur ise kullan─▒c─▒ taraf─▒ndan ger├žekten ge├žen ilk arg├╝mand─▒r.

 'use strict';

for (let j = 0; j < process.argv.length; j++) {  
    console.log(j + ' -> ' + (process.argv[j]));
}
 

T├╝m bu komut dosyas─▒, process.argv dizisi boyunca d├Âng├╝ yapar ve bu dizinlerde saklanan ├Â─čelerle birlikte dizinleri yazd─▒r─▒r. Hangi arg├╝manlar─▒ ald─▒─č─▒n─▒z─▒ ve hangi s─▒rayla ald─▒─č─▒n─▒z─▒ sorgularsan─▒z hata ay─▒klama i├žin ├žok yararl─▒d─▒r.

Commnadline arg├╝manlar─▒ ile ├žal─▒┼čmak i├žin iplikler gibi k├╝t├╝phaneleri de kullanabilirsiniz.


3







Arg├╝manlar─▒ iletmek kolayd─▒r ve bunlar─▒ almak yaln─▒zca process.argv dizisini okumaktan ibarettir. D├╝─č├╝m, temel olarak her yerden eri┼čilebilir olmas─▒n─▒ sa─člar. Ama onlar─▒ anahtar / de─čer ├žiftleri olarak okumak istedi─činize emin oldu─čunuz i├žin yorumlamak i├žin komut dosyas─▒ yazman─▒z gerekir.

Joseph Merdrignac azaltma kullanarak g├╝zel bir tane yay─▒nlad─▒, ancak ve key=value yerine bir s├Âzdizimine dayan─▒yordu . Bu ikinci standard─▒n kullan─▒lmas─▒n─▒ ├žok daha ├žirkin ve daha uzun s├╝re yeniden yazd─▒m ve bir cevap olarak g├Ânderece─čim ├ž├╝nk├╝ bir yorum olarak uymayacakt─▒. Ama i┼či halleder. -k value --key value

    const args = process.argv.slice(2).reduce((acc,arg,cur,arr)=>{
     if(arg.match(/^--/)){
       acc[arg.substring(2)] = true
       acc['_lastkey'] = arg.substring(2)
     } else
     if(arg.match(/^-[^-]/)){
       for(key of arg.substring(1).split('')){
         acc[key] = true
         acc['_lastkey'] = key
       }
     } else
       if(acc['_lastkey']){
         acc[acc['_lastkey']] = arg
         delete acc['_lastkey']
       } else
         acc[arg] = true
     if(cur==arr.length-1)
       delete acc['_lastkey']
     return acc
   },{})
 

Bu kodla bir komut node script.js alpha beta -charlie delta --echo foxtrot size a┼ča─č─▒daki nesneyi verir

 
args = {
 "alpha":true,
 "beta":true,
 "c":true,
 "h":true,
 "a":true,
 "r":true
 "l":true,
 "i":true,
 "e":"delta",
 "echo":"foxtrot"
}
 

3







Yukar─▒daki cevaplar m├╝kemmel olmas─▒na ra─čmen, birisi zaten iplikler ├Ânerdi, ancak paketi kullanmak ger├žekten kolay. Bu, arg├╝manlar─▒n komut sat─▒r─▒na ge├žirilmesini ger├žekten kolayla┼čt─▒ran g├╝zel bir pakettir.

 npm i yargs
const yargs = require("yargs");
const argv = yargs.argv;
console.log(argv);
 

Daha fazla bilgi i├žin l├╝tfen https://yargs.js.org/ adresini ziyaret edin .


2







process.argv Arkada┼č─▒n, komut sat─▒r─▒ args yakalama Node JS'de yerel olarak desteklenir. A┼ča─č─▒daki ├Ârne─če bak─▒n ::

 process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
})
 

1


2018-06-08





d├╝─č├╝m belgelerinde belirtildi─či gibi process.argv ├Âzelli─či, Node.js i┼člemi ba┼člat─▒ld─▒─č─▒nda ge├žirilen komut sat─▒r─▒ arg├╝manlar─▒n─▒ i├žeren bir dizi d├Ând├╝r├╝r.

├ľrne─čin, process-args.js i├žin ┼ču beti─či varsayarak:

 // print process.argv
process.argv.forEach((val, index) => {
   console.log(`${index}: ${val}`);
});
 

Node.js i┼čleminin ba┼člat─▒lmas─▒:

  $ node process-args.js one two=three four
 

Çıktı üretecekti:

 0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four
 

0







─░nsanlar─▒n ├žo─ču iyi cevaplar verdi. Ayr─▒ca burada bir ┼čeylere katk─▒da bulunmak isterim. lodash Uygulamay─▒ ba┼člat─▒rken iletti─čimiz t├╝m komut sat─▒r─▒ de─či┼čkenlerini yinelemek i├žin k├╝t├╝phaneyi kullanarak cevab─▒ veriyorum:

 // Lodash library
const _ = require('lodash');

// Function that goes through each CommandLine Arguments and prints it to the console.
const runApp = () => {
    _.map(process.argv, (arg) => {
        console.log(arg);
    });
};

// Calling the function.
runApp();
 

Yukar─▒daki kodu ├žal─▒┼čt─▒rmak i├žin a┼ča─č─▒daki komutlar─▒ ├žal─▒┼čt─▒r─▒n:

 npm install
node index.js xyz abc 123 456
 

Sonu├ž olacakt─▒r:

 xyz 
abc 
123
456
 

0







Komut sat─▒r─▒ de─či┼čkenlerini bir Node.js program─▒na iletmenin en iyi yolu bir Komut Sat─▒r─▒ Arabirimi (CLI) kullanmakt─▒r.

Kullanabilece─činiz nodejs-cli ad─▒nda ┼č─▒k bir npm mod├╝l├╝ var .

Ba─č─▒ml─▒l─▒─č─▒ olmayan bir tane olu┼čturmak istiyorsan─▒z, kontrol etmek istiyorsan─▒z Github'─▒mda bir tane var. Asl─▒nda olduk├ža basit ve kullan─▒m─▒ kolayd─▒r, buraya t─▒klay─▒n .


0







ES6 tarz─▒ ba─č─▒ml─▒l─▒k ├ž├Âz├╝m├╝:

 const longArgs = arg => {
    const [ key, value ] = arg.split('=');
    return { [key.slice(2)]: value || true }
};

const flags = arg => [...arg.slice(1)].reduce((flagObj, f) => ({ ...flagObj, [f]: true }), {});


const args = () =>
    process.argv
        .slice(2)
        .reduce((args, arg) => ({
            ...args,
            ...((arg.startsWith('--') && longArgs(arg)) || (arg[0] === '-' && flags(arg)))
        }), {});
 
 console.log(args());
 

0







Standart girdi ( --key=value ) temelli arg├╝man ayr─▒┼čt─▒rma

 const argv = (() => {
    const arguments = {};
    process.argv.slice(2).map( (element) => {
        const matches = element.match( '--([a-zA-Z0-9]+)=(.*)');
        if ( matches ){
            arguments[matches[1]] = matches[2]
                .replace(/^['"]/, '').replace(/['"]$/, '');
        }
    });
    return arguments;
})();
 

Komut ├Ârne─či

 node app.js --name=stackoverflow --id=10 some-another-argument --text="Hello World"
 

Argv sonucu: console.log(argv)

 {
    name: "stackoverflow",
    id: "10",
    text: "Hello World"
}
 

0