Lebih
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.
2264
31
Metode standar (tidak ada perpustakaan)
Argumen yang disimpan dalam
proses.argv
Berikut ini adalah node docs pada penanganan baris perintah arg:
Ini akan menghasilkan:
Untuk menormalkan argumen seperti biasa fungsi javascript akan menerima, aku melakukan ini pada saya node.js shell script:
Catatan yang pertama arg biasanya jalan menuju nodejs, dan yang kedua arg adalah lokasi dari script anda're mengeksekusi.
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:
2018 jawaban berdasarkan tren saat ini di alam liar:
Vanilla javascript argumen parsing:
Ini kembali:
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.
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.
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:
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.
Stdio Perpustakaan
Cara termudah untuk mengurai argumen baris perintah di NodeJS menggunakan x modul. Terinspirasi oleh UNIX
getopt
utilitas, hal ini sepele seperti berikut:Jika anda menjalankan kode sebelumnya dengan perintah ini:
Kemudian
ops
objek akan menjadi sebagai berikut:Sehingga anda dapat menggunakannya seperti yang anda inginkan. Misalnya:
Dikelompokkan pilihan juga didukung, sehingga anda dapat menulis
om
bukan-o -m
.Selain itu,
x
dapat menghasilkan bantuan/penggunaan output secara otomatis. Jika anda meneleponops.printHelp()
anda'll mendapatkan sebagai berikut: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:
Jika anda script ini disebut myScript.js dan anda ingin melewati pertama dan nama terakhir, 'Sean Worthington', sebagai argumen seperti di bawah ini:
Kemudian dalam naskah yang anda tulis:
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' }
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:
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.Berikutnya, mengurai pilihan menggunakan commandLineArgs():
pilihan
sekarang terlihat seperti ini: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:
Misalnya.
Perintah dan sub-perintah syntax (docker gaya) dalam bentuk:
Misalnya.
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.
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:
Output adalah di sini (membaca pilihan dengan strip dll, pendek dan panjang, numerik dll).
Berikut ini's my 0-dep solusi untuk argumen bernama:
Contoh:
Catatan: Tentu saja ini akan gagal ketika argumen berisi
=
. Ini hanya untuk penggunaan sangat sederhana.whithout librairies: menggunakan Array.prototipe.mengurangi()
untuk perintah ini
node index.js count=2 cetak debug=false msg=hi
juga,
kita dapat mengubah
oleh (banyak lagi)
untuk auto mengurai Boolean & Nomor
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.
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
File : args.js
Anda akan mendapatkan fasilitas seperti
Jika anda ingin menjalankan sesuatu seperti ini :
--
Atau sesuatu seperti :
--
proj.js
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.sekarang anda don't perlu untuk mengetahui indeks argumen. menggunakannya seperti
args.apapun
Anda dapat mengurai semua argumen dan memeriksa apakah mereka ada.
file: parse-cli-arguments.js:
Dari hanya melakukan: