Yazılı bir web sunucum var node.js ve belirli bir klasörle başlatmak istiyorum. JavaScript'teki argümanlara nasıl erişeceğimi bilmiyorum. Düğümü şu şekilde çalıştırıyorum:
$ node server.js folder
İşte server.js
benim sunucu kodum. Node.js yardımı bunun mümkün olduğunu söylüyor:
$ node -h
Usage: node [options] script.js [arguments]
JavaScript’teki bu argümanlara nasıl erişebilirim? Bir şekilde bu bilgiyi internette bulamamıştım.
Standart Yöntem (kütüphane yok)
Argümanlar saklanır process.argv
Burada komut satırını ele geçirirken düğümdeki dokümanlar:
process.argv
komut satırı argümanlarını içeren bir dizidir. İlk öğe 'düğüm', ikinci öğe ise JavaScript dosyasının adı olacaktır. Sonraki elemanlar herhangi bir ek komut satırı argümanı olacak.
// print process.argv
process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});
Bu şunları ü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
Düzenli bir javascript işlevi gibi argümanları normalleştirmek için bunu node.js kabuk komut dosyalarında yapıyorum:
var args = process.argv.slice(2);
İlk arg'in genellikle nodejs'e giden yol olduğunu ve ikinci argümanın yürütmekte olduğunuz komut dosyasının yeri olduğunu unutmayın.
Güncel sağ Bunun için kullanmak için cevap minimist kütüphane. Kullanırdık düğüm iyimser ama o zamandan beri kullanımdan kaldırıldı.
İşte, doğrudan doğruya minimist dokümantasyondan nasıl yararlanı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' }
Şu andaki trendlere göre 2018 cevabı:
Vanilla javascript argümanı ayrıştırma:
const args = process.argv;
console.log(args);
Bu döndürür:
$ node server.js one two=three four
['node', '/home/server.js', 'one', 'two=three', 'four']
Resmi dokümanlar
Bağımsız değişken ayrıştırma için en çok kullanılan NPM paketleri:
Minimist: Minimum argüman ayrıştırma için.
Commander.js: Argüman ayrıştırma için en çok kabul gören modül.
miyav: Commander.js'ye daha açık alternatif
Yargs: Daha karmaşık argüman ayrıştırma (ağır).
Vorpal.js: Bağımsız değişken ayrıştırma ile olgun / etkileşimli komut satırı uygulamaları.
İyimser (düğüm-iyimser)
Çıkış yapmak iyimser kütüphaneKomut satırı seçeneklerini el ile ayrıştırmaktan çok daha iyi.
Güncelleştirme
Optimist kullanımdan kaldırılmıştır. Deneyin yargs Bu bir iyimser aktif çatalıdır.
Burada birçok harika cevap var, ama hepsi çok karmaşık görünüyor. Bu, bash betiklerinin argüman değerlerine nasıl eriştiğine çok benzemektedir ve MooGoo'nun işaret ettiği gibi node.js ile standart olarak sunulmuştur.
(Sadece node.js için yeni olan biri için 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"
Seçeneklerinizi, eylemlerinizi ve argümanlarınızı tanımlamak için harika çalışır. Ayrıca sizin için yardım sayfalarını oluşturur.
Geri arama yaklaşımını beğenirseniz, kullanıcıdan giriş almak için harika çalışır.
Jeneratör yaklaşımını beğendiyseniz, kullanıcı girişi için harika çalışıyor.
Stdio Kütüphanesi
NodeJS'de komut satırı bağımsız değişkenlerini ayrıştırmanın en kolay yolu stdio modülü. UNIX'den ilham alındı getopt
yarar, 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ğin gibi kullanabilirsin. Örneğin:
if (ops.kaka && ops.check) {
console.log(ops.kaka + ops.check[0]);
}
Gruplanmış seçenekler de desteklenir, böylece yazabilirsiniz -om
yerine -o -m
.
Ayrıca, stdio
otomatik olarak bir yardım / kullanım çıkışı üretebilir. Ararsan 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
Zorunlu bir seçenek verilmediyse (hata mesajından önce) veya yanlış belirtilmişse (örneğin, bir seçenek için tek bir arg seçerseniz ve 2'ye ihtiyaç duyarsa), önceki mesaj da gösterilir.
Yükleyebilirsiniz stdio modülü kullanarak NPM:
npm install stdio