Bagaimana cara menyampaikan argumen baris perintah untuk Node.js program ini?

Saya memiliki sebuah server web yang ditulis dalam Node.js dan saya ingin memulai dengan sebuah folder tertentu. I'm tidak yakin bagaimana untuk mengakses argumen dalam JavaScript. I'm berjalan node seperti ini:

$ node server.js folder

di sini server.js saya kode server. Node.js membantu bilang ini mungkin:

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

Bagaimana saya mengakses argumen-argumen di JavaScript? Entah bagaimana, saya tidak dapat menemukan informasi ini di web.

Larutan

Metode standar (tidak ada perpustakaan)

Argumen yang disimpan dalam proses.argv

Berikut ini adalah node docs pada penanganan baris perintah arg:

proses.argv adalah array yang berisi argumen baris perintah. Elemen pertama akan 'node', kedua elemen tersebut akan menjadi nama file JavaScript. Elemen berikutnya akan ada tambahan argumen baris perintah.

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

Ini akan menghasilkan:

$ 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
Komentar (8)

Untuk menormalkan argumen seperti biasa fungsi javascript akan menerima, aku melakukan ini pada saya node.js shell script:

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

Catatan yang pertama arg biasanya jalan menuju nodejs, dan yang kedua arg adalah lokasi dari script anda're mengeksekusi.

Komentar (12)

Up-to-date kanan jawaban untuk ini menggunakan minimist perpustakaan. Kami digunakan untuk menggunakan node-optimis tapi sejak saat itu telah usang.

Berikut adalah contoh bagaimana menggunakan ini diambil langsung dari minimist dokumentasi:

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' }
Komentar (6)

2018 jawaban berdasarkan tren saat ini di alam liar:


Vanilla javascript argumen parsing:

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

Ini kembali:

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

Resmi docs


Yang paling sering digunakan NPM packages untuk argumen parsing:

Minimist: Untuk minimal argumen parsing.

Commander.js: Paling mengadopsi modul untuk argumen parsing.

Meow: alternatif yang lebih Ringan untuk Commander.js

Yargs: yang Lebih canggih argumen parsing (berat).

Vorpal.js: Dewasa / command-line aplikasi dengan argumen parsing.

Komentar (7)

Optimis (node-optimis)

Check out optimis perpustakaan, itu jauh lebih baik dari parsing opsi baris perintah dengan tangan.

Update

Optimis adalah usang. Mencoba yargs yang merupakan fork dari optimis.

Komentar (4)

Beberapa jawaban yang besar di sini, tapi itu semua tampaknya sangat kompleks. Ini sangat mirip dengan bagaimana bash script akses argumen nilai-nilai dan's sudah disediakan dengan standar node.js sebagai MooGoo menunjuk keluar. (Hanya untuk membuatnya dapat dimengerti untuk seseorang yang's baru node.js)

Contoh:

$ 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"
Komentar (0)

Commander.js

Karya besar untuk menentukan pilihan anda, tindakan, dan argumen. Hal ini juga menghasilkan halaman bantuan untuk anda.

Segera

Karya besar untuk mendapatkan masukan dari pengguna, jika anda suka callback pendekatan.

Co-Prompt

Karya besar untuk mendapatkan masukan dari pengguna, jika anda suka generator pendekatan.

Komentar (2)

Stdio Perpustakaan

Cara termudah untuk mengurai argumen baris perintah di NodeJS menggunakan x modul. Terinspirasi oleh UNIX getopt utilitas, hal ini sepele seperti berikut:

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'}
});

Jika anda menjalankan kode sebelumnya dengan perintah ini:

node  -c 23 45 --map -k 23 file1 file2

Kemudian ops objek akan menjadi sebagai berikut:

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

Sehingga anda dapat menggunakannya seperti yang anda inginkan. Misalnya:

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

Dikelompokkan pilihan juga didukung, sehingga anda dapat menulis om bukan -o -m.

Selain itu, x dapat menghasilkan bantuan/penggunaan output secara otomatis. Jika anda menelepon ops.printHelp() anda'll mendapatkan sebagai berikut:

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

Sebelumnya pesan ditampilkan juga jika wajib opsi ini tidak diberikan (didahului dengan pesan kesalahan) atau jika itu adalah mispecified (misalnya, jika anda menentukan satu arg untuk pilihan dan kebutuhan 2).

Anda dapat menginstal x modul menggunakan NPM:

npm install stdio
Komentar (3)

Jika anda script ini disebut myScript.js dan anda ingin melewati pertama dan nama terakhir, 'Sean Worthington', sebagai argumen seperti di bawah ini:

node myScript.js Sean Worthington

Kemudian dalam naskah yang anda tulis:

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

Tidak ada Libs dengan Bendera Diformat menjadi Objek Sederhana

js fungsi getArgs () { const args = {}; proses.argv .slice(2, proses.argv.panjang) .forEach( arg => { // panjang arg jika (arg.iris(0,2) === '--') { const longArg = arg.split('='); const longArgFlag = longArg[0].slice(2,longArg[0].panjang); const longArgValue = longArg.panjang > 1 ? longArg[1] : benar; args[longArgFlag] = longArgValue; } // flags else if (arg[0] === '-') { const flags = arg.slice(1,arg.panjang).split(''); bendera.forEach(flag => { args[flag] = true; }); } }); kembali args; } const args = getArgs(); konsol.log(args);

Contoh

Sederhana

masukan

sh node test.js -D --name=Hello

output

js { D: benar, nama: 'Halo' }

Dunia Nyata

masukan

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

output js { l: benar, H: benar, R: benar, s: benar, ip: '127.0.0.1', port: '8080', env: 'dev' }

Komentar (2)

command-line-args adalah layak lihat!

Anda dapat mengatur opsi menggunakan main notasi standar (pelajari lebih lanjut). Perintah ini semua setara, menetapkan nilai-nilai yang sama:

$ 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

Untuk mengakses nilai-nilai, pertama membuat daftar opsi definisi menggambarkan pilihan aplikasi anda menerima. Yang type properti adalah setter fungsi (nilai yang diberikan adalah melewati ini), memberikan anda kontrol penuh atas nilai yang diterima.

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

Berikutnya, mengurai pilihan menggunakan commandLineArgs():

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

pilihan sekarang terlihat seperti ini:

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

Penggunaan lanjutan

Di samping atas penggunaan khas, anda dapat mengkonfigurasi command-line-args untuk menerima lebih maju sintaks bentuk.

Perintah berbasis sintaks (git gaya) dalam bentuk:

$ executable  [options]

Misalnya.

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

Perintah dan sub-perintah syntax (docker gaya) dalam bentuk:

$ executable  [options]  [options]

Misalnya.

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

Panduan penggunaan generasi

Panduan penggunaan (biasanya dicetak ketika --help adalah set) dapat dihasilkan dengan menggunakan command-line-penggunaan. Lihat contoh di bawah ini dan baca dokumentasi untuk instruksi bagaimana untuk membuat mereka.

Khas penggunaan panduan contoh.

The polimer-cli panduan penggunaan adalah sebuah contoh kehidupan nyata.

Bacaan Lebih Lanjut

Ada banyak hal untuk belajar, silakan lihat wiki untuk contoh-contoh dan dokumentasi.

Komentar (2)

Ada's sebuah aplikasi untuk itu. Nah, modul. Nah, lebih dari satu, mungkin ratusan.

Yargs adalah salah satu yang menyenangkan, untuk dokumen yang keren untuk dibaca.

Berikut ini's contoh dari github/npm halaman:

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

Output adalah di sini (membaca pilihan dengan strip dll, pendek dan panjang, numerik dll).

$ ./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' ]
Komentar (0)

Berikut ini's my 0-dep solusi untuk argumen bernama:

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)

Contoh:

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

Catatan: Tentu saja ini akan gagal ketika argumen berisi =. Ini hanya untuk penggunaan sangat sederhana.

Komentar (0)

whithout librairies: menggunakan Array.prototipe.mengurangi()

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

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

}, {})

untuk perintah ini node index.js count=2 cetak debug=false msg=hi

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

juga,

kita dapat mengubah

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

oleh (banyak lagi)

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

untuk auto mengurai Boolean & Nomor

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

It's mungkin ide yang baik untuk mengelola konfigurasi secara terpusat menggunakan sesuatu seperti nconf https://github.com/flatiron/nconf

Hal ini membantu anda bekerja dengan file-file konfigurasi, variabel lingkungan, argumen baris perintah.

Komentar (1)

Lewat,mengurai argumen adalah proses yang mudah. Node menyediakan anda dengan proses tersebut.argv properti, yang merupakan array dari string, yang adalah argumen-argumen yang digunakan ketika Node dipanggil. Entri pertama dari array adalah Node yang dapat dijalankan, dan entri kedua adalah nama script anda.

Jika anda jalankan script di bawah ini dengan atguments

$ node args.js arg1 arg2

File : args.js

console.log(process.argv)

Anda akan mendapatkan fasilitas seperti

 ['node','args.js','arg1','arg2']
Komentar (0)
npm install ps-grab

Jika anda ingin menjalankan sesuatu seperti ini :

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

--

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

Atau sesuatu seperti :

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

--

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

proj.js


for(var i=0;i
Komentar (0)

Anda dapat mencapai argumen baris perintah menggunakan sistem.args. Dan saya menggunakan solusi di bawah ini untuk mengurai argumen dalam suatu objek, sehingga saya bisa mendapatkan yang saya inginkan dengan nama.

var system = require('system');

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

sekarang anda don't perlu untuk mengetahui indeks argumen. menggunakannya seperti args.apapun

Catatan: anda harus menggunakan argumen bernama seperti file.js x=1 y=2 untuk menggunakan solusi ini.

Komentar (0)

Anda dapat mengurai semua argumen dan memeriksa apakah mereka ada.

file: 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;
}

Dari hanya melakukan:

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