Pertanyaan Bagaimana cara meneruskan argumen baris perintah ke program Node.js?


Saya memiliki server web yang ditulis Node.js dan saya ingin meluncurkan dengan folder tertentu. Saya tidak yakin cara mengakses argumen dalam JavaScript. Saya menjalankan simpul seperti ini:

$ node server.js folder

sini server.js adalah kode server saya. Bantuan Node.js mengatakan ini mungkin:

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

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


1764
2017-12-04 01:56


asal


Jawaban:


Metode Standar (tidak ada perpustakaan)

Argumen disimpan dalam process.argv

Di sini adalah node docs pada penanganan argumen baris perintah:

process.argv adalah larik yang berisi argumen baris perintah. Elemen pertama adalah 'node', elemen kedua adalah nama file JavaScript. Elemen selanjutnya adalah argumen baris perintah tambahan.

// 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

2344
2017-12-04 02:05



Untuk menormalkan argumen seperti fungsi javascript biasa akan menerima, saya melakukan ini di skrip shell node.js saya:

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

Perhatikan bahwa arg pertama biasanya adalah path ke nodejs, dan argumen kedua adalah lokasi skrip yang Anda eksekusi.


472
2018-04-23 23:13



Yang terbaru kanan jawab untuk ini untuk menggunakan minimalis Perpustakaan. Kami biasa menggunakannya simpul-optimis tetapi sejak itu sudah ditinggalkan.

Berikut ini contoh cara menggunakannya diambil langsung dari dokumentasi minimist:

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

234
2017-07-08 17:26



2018 jawaban berdasarkan tren saat ini di alam liar:


Vanilla javascript argumen parsing:

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

Ini mengembalikan:

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

Dokumen resmi


Paket NPM yang paling banyak digunakan untuk parsing argumen:

Minimist: Untuk parsing argumen minimal.

Commander.js: Modul yang paling banyak digunakan untuk parsing argumen.

meong: Alternatif yang lebih ringan untuk Commander.js

Yargs: Parsing argumen yang lebih canggih (berat).

Vorpal.js: Aplikasi baris perintah dewasa / interaktif dengan parsing argumen.


203
2018-01-14 05:26



Optimis (simpul-optimis)

Periksa perpustakaan optimis, jauh lebih baik daripada mengurai opsi baris perintah dengan tangan.

Memperbarui

Optimis tidak lagi digunakan. Mencoba yargs yang merupakan garpu aktif dari optimis.


107
2017-07-04 04:02



Beberapa jawaban yang bagus di sini, tetapi semuanya tampaknya sangat rumit. Ini sangat mirip dengan cara bash scripts mengakses nilai argumen dan itu sudah disediakan standar dengan node.js seperti yang ditunjukkan oleh MooGoo. (Hanya untuk membuatnya bisa dimengerti oleh seseorang yang baru mengenal 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"

68
2017-12-12 05:19



Commander.js

Berfungsi bagus untuk menentukan opsi, tindakan, dan argumen Anda. Ini juga menghasilkan halaman bantuan untuk Anda.

Tepat

Berfungsi bagus untuk mendapatkan masukan dari pengguna, jika Anda menyukai pendekatan panggilan balik.

Co-Prompt

Berfungsi bagus untuk mendapatkan masukan dari pengguna, jika Anda menyukai pendekatan generator.


65
2017-09-20 10:20



Perpustakaan Stdio

Cara termudah untuk mem-parsing argumen baris perintah di NodeJS adalah menggunakan stdio modul. Terinspirasi oleh UNIX getopt utilitas, itu 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 <your_script.js> -c 23 45 --map -k 23 file1 file2

Kemudian ops objek akan menjadi seperti berikut:

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

Jadi Anda bisa menggunakannya sesuai keinginan. Contohnya:

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

Opsi yang dikelompokkan juga didukung, sehingga Anda dapat menulis -om dari pada -o -m.

Selanjutnya, stdio dapat menghasilkan output bantuan / penggunaan secara otomatis. Jika Anda menelepon ops.printHelp() Anda akan mendapatkan yang berikut:

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

Pesan sebelumnya ditunjukkan juga jika opsi wajib tidak diberikan (didahului oleh pesan kesalahan) atau jika salah ketik (misalnya, jika Anda menetapkan argumen tunggal untuk opsi dan perlu 2).

Anda dapat menginstal stdio modul menggunakan NPM:

npm install stdio

35
2017-08-13 10:30



Jika skrip Anda disebut myScript.js dan Anda ingin menyampaikan nama depan dan belakang, 'Sean Worthington', sebagai argumen seperti di bawah ini:

node myScript.js Sean Worthington

Kemudian dalam skrip Anda, Anda menulis:

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

28
2018-06-17 00:04



command-line-args layak untuk dilihat!

Anda dapat mengatur opsi menggunakan standar notasi utama (Belajarlah lagi). Perintah-perintah ini semua setara, pengaturan 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, pertama-tama buat daftar definisi opsi menjelaskan opsi yang diterima aplikasi Anda. Itu type properti adalah fungsi setter (nilai yang diberikan dilewatkan melalui ini), memberi 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 }
]

Selanjutnya, parse opsi menggunakan commandLineArgs ():

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

options sekarang terlihat seperti ini:

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

Penggunaan tingkat lanjut

Selain penggunaan umum di atas, Anda dapat mengonfigurasi argumen baris perintah untuk menerima bentuk sintaks yang lebih canggih.

Sintaks berbasis perintah (git style) dalam bentuk:

$ executable <command> [options]

Sebagai contoh.

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

Perintah dan sintaks sub-perintah (gaya buruh pelabuhan) dalam bentuk:

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

Sebagai contoh.

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

Generasi panduan penggunaan

Panduan penggunaan (biasanya dicetak saat --help diatur) dapat dihasilkan menggunakan penggunaan baris perintah. Lihat contoh di bawah dan baca dokumentasi untuk instruksi cara membuatnya.

Contoh panduan penggunaan tipikal.

usage

Itu polimer-cli panduan penggunaan adalah contoh nyata yang baik.

usage

Bacaan lebih lanjut

Ada banyak hal lagi untuk dipelajari, silakan lihat wiki untuk contoh dan dokumentasi.


19
2017-11-15 16:00



Ada aplikasi untuk itu. Yah, modul. Yah, lebih dari satu, mungkin ratusan.

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

Berikut ini contoh dari laman github / npm:

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

Output ada di sini (membaca opsi dengan tanda hubung dll, pendek dan panjang, angka 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' ]

16
2018-03-14 00:45