Saya memiliki server web yang ditulis dalam Node.js dan saya ingin memulai dengan folder tertentu. Saya tidak yakin cara mengakses argumen dalam JavaScript. Saya menjalankan simpul seperti ini:
$ node server.js folder
di 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 itu dalam JavaScript? Entah bagaimana saya tidak dapat menemukan informasi ini di web.
process.argv[n]
manan
indeks berbasis nolnode [options] [ -e script | script.js ] [arguments]
ataunode debug script.js [arguments]
. misalnya:node --harmony script.js balala
ataunode --no-deprecation --enable-ssl2 script.js balala
, kita dapat menggunakan process.execArgv dengan process.argvUntuk menormalkan argumen seperti yang akan diterima fungsi javascript, saya melakukan ini di skrip shell node.js saya:
Perhatikan bahwa arg pertama biasanya path ke nodejs, dan arg kedua adalah lokasi skrip yang Anda jalankan.
sumber
execArgv
yang tidak diargv
sehingga 2 cukupprocess.argv.splice(process.execArgv.length + 2)
: untuk perintahnode --harmony script.js --version
, theprocess.argv
is['/usr/local/bin/node', 'script.js', '--version']
. Bendera dinode
yang tidak termasuk dalamprocess.argv
!Jawaban tepat yang terkini untuk ini adalah menggunakan perpustakaan minimalis . Kami dulu menggunakan optimis-simpul tetapi sejak itu sudah usang.
Berikut adalah contoh cara menggunakannya diambil langsung dari dokumentasi minimalis:
-
-
sumber
2018 menjawab berdasarkan tren saat ini di alam:
Argumen javascript vanilla:
Ini mengembalikan:
Dokumen resmi
Paket NPM yang paling banyak digunakan untuk penguraian argumen:
Minimist : Untuk parsing argumen minimal.
Commander.js : Modul yang paling banyak diadopsi untuk parsing argumen.
Meow : Alternatif yang lebih ringan untuk Commander.js
Yargs : Argumen yang lebih canggih (berat).
Vorpal.js : Aplikasi baris perintah yang matang / interaktif dengan penguraian argumen.
sumber
Optimis (optimis-simpul)
Lihat pustaka optimis , itu jauh lebih baik daripada parsing opsi baris perintah dengan tangan.
Memperbarui
Optimis sudah usang. Coba yarg yang merupakan garpu optimis aktif.
sumber
Beberapa jawaban bagus di sini, tetapi semuanya tampak sangat kompleks. Ini sangat mirip dengan bagaimana nilai skrip bash mengakses nilai argumen dan sudah disediakan standar dengan node.js seperti yang ditunjukkan MooGoo. (Hanya untuk membuatnya dimengerti oleh seseorang yang baru ke node.js)
Contoh:
sumber
Commander.js
Sangat bagus untuk menentukan opsi, tindakan, dan argumen Anda. Ini juga menghasilkan halaman bantuan untuk Anda.
Tepat
Berfungsi bagus untuk mendapatkan input dari pengguna, jika Anda menyukai pendekatan panggilan balik.
Prompt
Berfungsi bagus untuk mendapatkan input dari pengguna, jika Anda suka pendekatan generator.
sumber
Tidak Ada Lib dengan Bendera yang Diformat menjadi Objek Sederhana
Contohnya
Sederhana
memasukkan
keluaran
Dunia nyata
memasukkan
keluaran
sumber
= longArg[1]
Anda bisa menulis= longArg.length > 1 ? longArg[1] : true;
Ini akan membiarkan Anda melewati jenis argumen ini:node config/build.js --flag1 --flag2
Perpustakaan Stdio
Cara termudah untuk mem-parsing argumen baris perintah di NodeJS adalah menggunakan modul stdio . Terinspirasi oleh
getopt
utilitas UNIX , itu sepele seperti berikut:Jika Anda menjalankan kode sebelumnya dengan perintah ini:
Maka
ops
objeknya adalah sebagai berikut:Jadi Anda bisa menggunakannya sesuka Anda. Contohnya:
Opsi yang dikelompokkan juga didukung, sehingga Anda dapat menulis
-om
alih-alih-o -m
.Selanjutnya,
stdio
dapat menghasilkan output bantuan / penggunaan secara otomatis. Jika Anda menelepon,ops.printHelp()
Anda akan mendapatkan yang berikut ini:Pesan sebelumnya ditampilkan juga jika opsi wajib tidak diberikan (didahului oleh pesan kesalahan) atau jika salah tentukan (misalnya, jika Anda menentukan satu argumen untuk opsi dan perlu 2).
Anda dapat menginstal modul stdio menggunakan NPM :
sumber
Jika skrip Anda disebut myScript.js dan Anda ingin memberikan nama depan dan belakang, 'Sean Worthington', sebagai argumen seperti di bawah ini:
Kemudian dalam skrip Anda, Anda menulis:
sumber
command-line-args layak untuk dilihat!
Anda dapat mengatur opsi menggunakan standar notasi utama ( pelajari lebih lanjut ). Semua perintah ini setara, menetapkan nilai yang sama:
Untuk mengakses nilai, pertama buat daftar definisi opsi yang menggambarkan opsi yang diterima aplikasi Anda. The
type
properti adalah fungsi setter (nilai yang diberikan dilewatkan melalui ini), memberikan Anda kontrol penuh atas nilai yang diterima.Selanjutnya, uraikan opsi menggunakan commandLineArgs () :
options
sekarang terlihat seperti ini:Penggunaan tingkat lanjut
Selain penggunaan tipikal di atas, Anda dapat mengonfigurasi baris perintah untuk menerima bentuk sintaksis yang lebih canggih.
Sintaks berbasis perintah (gaya git) dalam bentuk:
Sebagai contoh.
Perintah dan sub-perintah sintaks (gaya buruh pelabuhan) dalam bentuk:
Sebagai contoh.
Pembuatan panduan penggunaan
Panduan penggunaan (biasanya dicetak saat
--help
disetel) dapat dibuat menggunakan penggunaan baris perintah . Lihat contoh di bawah dan baca dokumentasi untuk instruksi cara membuatnya.Contoh panduan penggunaan khas.
The polimer-cli panduan penggunaan adalah contoh kehidupan nyata baik.
Bacaan lebih lanjut
Ada banyak lagi yang harus dipelajari, silakan lihat wiki untuk contoh dan dokumentasi.
sumber
partial
danstopAtFirstUnknown
. Lihat dokumen .Ada aplikasi untuk itu. Nah, modul. Ya, lebih dari satu, mungkin ratusan.
Yargs adalah salah satu yang menyenangkan, dokumennya keren untuk dibaca.
Berikut ini contoh dari halaman github / npm:
Output di sini (membaca opsi dengan tanda hubung dll, pendek dan panjang, numerik dll).
sumber
Inilah solusi 0-dep saya untuk argumen bernama:
Contoh:
Catatan: Secara alami ini akan gagal ketika argumen berisi a
=
. Ini hanya untuk penggunaan yang sangat sederhana.sumber
Mungkin ide yang baik untuk mengelola konfigurasi Anda secara terpusat menggunakan sesuatu seperti nconf https://github.com/flatiron/nconf
Ini membantu Anda bekerja dengan file konfigurasi, variabel lingkungan, argumen baris perintah.
sumber
tanpa librairies: using Array.prototype.reduce ()
untuk perintah ini
node index.js count=2 print debug=false msg=hi
juga,
kita bisa berubah
oleh (lebih lama)
untuk mengurai Boolean & Nomor
sumber
count
danc
opsi baris perintah (c
sebagai alias / shorcut untukcount
)?Melewati, mengurai argumen adalah proses yang mudah. Node memberi Anda properti process.argv, yang merupakan array dari string, yang merupakan argumen yang digunakan ketika Node dipanggil. Entri pertama array adalah Node yang dapat dieksekusi, dan entri kedua adalah nama skrip Anda.
Jika Anda menjalankan skrip dengan atguments di bawah ini
File: args.js
Anda akan mendapatkan array seperti
sumber
Jika Anda ingin menjalankan sesuatu seperti ini:
-
Atau sesuatu seperti:
-
sumber
proj.js
Terminal:
Hasil:
Penjelasan:
0
: Direktori node.exe di maching Anda (C: \ Program Files \ nodejs \ node.exe ')1
: Direktori file proyek Anda. (proj.js)2
: Argumen pertama Anda ke simpul (arg1)3
: Argumen kedua Anda ke simpul (arg2)4
: Argumen ketiga Anda ke simpul (arg3)argumen Anda yang sebenarnya mulai berupa
2nd
indeksargv
array, yaituprocess.argv[2]
.sumber
Anda dapat mencapai argumen baris perintah menggunakan
system.args
. Dan saya menggunakan solusi di bawah ini untuk mem-parsing argumen menjadi objek, jadi saya bisa mendapatkan yang saya inginkan dengan nama.sekarang Anda tidak perlu tahu indeks argumennya. gunakan seperti
args.whatever
sumber
map
properti tidak terdefinisi.Anda dapat mem-parsing semua argumen dan memeriksa apakah ada.
file: parse-cli-arguments.js:
Dari sekadar melakukan:
sumber
Tanpa perpustakaan
Jika Anda ingin melakukan ini di vanilla JS / ES6 Anda dapat menggunakan solusi berikut
hanya bekerja di NodeJS> 6
Dan perintah ini
akan menghasilkan hasil sebagai berikut
ps Harap perbaiki kode di peta dan kurangi fungsi jika Anda menemukan solusi yang lebih elegan, terima kasih;)
sumber
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Meskipun jawaban di atas sempurna, dan seseorang telah menyarankan yarg, menggunakan paket itu sangat mudah. Ini adalah paket yang bagus yang membuat argumen lewat perintah ke baris sangat mudah.
Silakan kunjungi https://yargs.js.org/ untuk info lebih lanjut.
sumber
Melewati argumen itu mudah, dan menerimanya hanya masalah membaca prosesnya. Array array Node dapat diakses dari mana saja, pada dasarnya. Tapi Anda pasti ingin membacanya sebagai pasangan kunci / nilai, jadi Anda perlu bagian untuk skrip untuk menafsirkannya.
Joseph Merdrignac memposting yang indah menggunakan pengurangan, tetapi itu bergantung pada
key=value
sintaks, bukan-k value
dan--key value
. Saya menulis ulang itu jauh lebih jelek dan lebih lama untuk menggunakan standar kedua itu, dan saya akan mempostingnya sebagai jawaban karena itu tidak cocok sebagai komentar. Tapi itu menyelesaikan pekerjaan.Dengan kode ini, sebuah perintah
node script.js alpha beta -charlie delta --echo foxtrot
akan memberi Anda objek berikutsumber
Cara paling sederhana untuk mengambil argumen di Node.js adalah melalui array process.argv. Ini adalah objek global yang dapat Anda gunakan tanpa mengimpor pustaka tambahan untuk menggunakannya. Anda hanya perlu meneruskan argumen ke aplikasi Node.js, seperti yang kami tunjukkan sebelumnya, dan argumen ini dapat diakses di dalam aplikasi melalui array process.argv.
Elemen pertama dari array process.argv akan selalu berupa jalur sistem file yang menunjuk ke node yang dapat dieksekusi. Elemen kedua adalah nama file JavaScript yang sedang dieksekusi. Dan elemen ketiga adalah argumen pertama yang sebenarnya disahkan oleh pengguna.
Semua skrip ini lakukan adalah loop melalui array process.argv dan mencetak indeks, bersama dengan elemen yang disimpan dalam indeks tersebut. Ini sangat berguna untuk debugging jika Anda pernah mempertanyakan argumen apa yang Anda terima, dan dalam urutan apa.
Anda juga dapat menggunakan pustaka seperti yarg untuk bekerja dengan argumen commnadline.
sumber
Solusi TypeScript tanpa pustaka:
Memasukkan:
ts-node index.js -p param --parameter parameter
Keluaran:
{ p: 'param ', parameter: 'parameter' }
sumber
process.argv
adalah teman Anda, menangkap argumen baris perintah secara asli didukung di Node JS. Lihat contoh di bawah ini ::sumber
seperti yang dinyatakan dalam node docs Properti process.argv mengembalikan sebuah array yang berisi argumen baris perintah yang dilewati ketika proses Node.js diluncurkan.
Misalnya, dengan asumsi skrip berikut untuk proses-args.js:
Meluncurkan proses Node.js sebagai:
Akan menghasilkan output:
sumber
Sebagian besar orang sudah memberikan jawaban yang baik. Saya juga ingin berkontribusi sesuatu di sini. Saya memberikan jawaban menggunakan
lodash
pustaka untuk beralih melalui semua argumen baris perintah yang kami lewati saat memulai aplikasi:Untuk menjalankan kode di atas cukup jalankan perintah berikut:
Hasilnya adalah:
sumber
Cara terbaik untuk meneruskan argumen baris perintah ke program Node.js adalah dengan menggunakan Command Line Interface (CLI)
Ada modul npm bagus yang disebut nodejs-cli yang dapat Anda gunakan.
Jika Anda ingin membuatnya tanpa ketergantungan, saya punya satu di Github saya jika Anda ingin melihatnya, sebenarnya cukup sederhana dan mudah digunakan, klik di sini .
sumber
Solusi tanpa ketergantungan gaya ES6:
sumber