yargs.js ile Komut Satırı Arayüzü (CLI)
Üç tür komut satırı argümanı vardır:
- durum (positional) argümanları,
- adlandırılmış (named) argümanlar
- ve bayraklar (flags).
- Positional (konumla ilgili, durum) değişkeni, ne yapmak istediğimizi yani eylemi tanımlar.
- Adlandırılmış bağımsız değişken, bir anahtar, değer çiftidir.
- Bayrak, varlığı veya yokluğu uygulamaya bilgi sağlayan bağımsız bir anahtardır.
Aşağıdaki rename
komutu iki positional değişken alıyor ancak bunun yerine isimlendirilmiş değişkenler ile de komutu yazabiliyoruz.
rename simdikiAdi.txt yeniAdi.txt
rename --eski simdikiAdi.txt --yeni yeniAdi.txtveya kısa adlarıyla,
çoğu komut - işaret (sigil) kullanır ama -- de olabiliyorrename -e simdikiAdi.txt -y yeniAdi.txt
Ancak bayraklar (flags) tek başına olup (yani anahtar değer çifti değil) uygulamaya bir bilgi iletmek için kullanılır.
Aşağıdaki örnekte uzun hali --detach
olan komut ile docker.exe
uygulamasına diyoruz ki; sen konteyner oluştur ama bu terminali oluşturduğun konteynerin terminaline bağlayarak çıktıları canlı görmemi sağlama. --detach
Komutunu kısaca -d
kullanarak da geçebilirdik docker.exe
uygulamasına.
docker run --name=containerAdi --detach ubuntu
veya
docker exec -i --tty --user root containerAdi
Nitekim ikinci örneğimizde -i
veya --interactive
bayrağı ile kendi konsolumuzda yazdıklarımızı konteynere aktarmasını sağlar. Nitekim terminalimizi konteynerin terminaline bağlyarak konteynerin stdout ve stderr çıktılarını aktif konsolumuzda görmemizi sağlayacak -t
ile --tty
argümanı da bayrak (flag) olarak kullanıyoruz.
Kaynaklar
- İzlemek isterseniz bu youtube videosu faydalı olacaktır.
2. Koç Akademi’nin yayınladığı eğitimde bu ve bu iki video çok işinizi görebilir. (Koç’un sunduğu bu çevrimiçi siteyle sosyal sorumluluğun nasıl bir şey olduğunu anlıyoruz)
Test Aracı
Önce çevrimiçi denemeler için bu adresten başlayabiliriz https://repl.it/@caub/yargs#index.js
repl.it üstünde koşan nodejs uygulamanıza (veya diğer uygulamalara da) argümanlar geçirmek istiyorsanız
.replit
dosyası oluşturup içine komutlarınızı girebilirsiniz.
language="node"
run="node index.js --arg1 --arg2 --arg3"
Komut Satırını İnceleyelim
Yargs parametreleri komut ve seçenek olarak iki parçaya bölüyor.
- command
- option
$ node index service get --sayi 22 -s=33 -s 44 -c "config değeri metin olsun" --isTlsPassive 0 --ayar-dosyasi-faal true
Yukarıdaki komut en genel anlamda 3 paçadan oluyor:
node.exe
: interpreter uygulama (node
veyanode.exe
diye yazsak da çalışır)index
: ikinci parametre yorumlanacak ve çalıştırılacak dosyaindex.js
(kısacaindex
yazıyoruz venode.exe
index.js
dosyasını buluyor)- üçüncü blok ise parametreler
service
,get
,--sayi 22
,-s=33
,-s 44
,-c “config değeri metin olsun”
,--isTlsPassive 0
,--ayar-dosyasi-faal true
Yargs Parametreleri Nasıl İşler
Parametreler aşağıdaki şekilde
- Ya hiç önünde tire olmaksızın (
service
veyaget
gibi) (command
fonksiyonuyla işleyebileceğiz).service
veget
parametreleri_
özelliğinde taşınıyor.
- Ya
--
ile (örn.--sayi
değeri22
) (option
fonksiyonuyla işleyebileceğiz)
// Parametre uzun adıyla --sayi veya kısa adıyla -s girilebilir
--sayi 22
--sayi=22-s=33 // Hem 's=33' hem 's 44' şeklinde girilirse
-s 44 // değerler s özelliğine dizi olarak yazılır [33, 44]// otomatik string olarak parse ediyor
-c "config değeri metin olsun"// dikkat! camel case doğrudan kullanılıyor
--isTlsPassive 0
// kebap case girdik hem camel hem kebap case iki özellikte saklıyor
--ayar-dosyasi-faal true
- Ya da tek tire ile
-
(örn.-s
değeri33
veya-s=44
) (option
ile ele alacağız)
Başka bir örnek de aşağıdadır:
require(‘yargs’).parse(…)
parse([])
metoduna geçireceğimiz dizi ile tıpkı komut satırından gelmiş gibi ayrıştırabiliriz.
Ornekler
check() Fonksiyonuyla Parametrelerin Denetimi
const yargs = require('yargs')
const fs = require('fs')
yargs.command({
command: 'add',
describe: 'Adds two number',
builder: {
firstNumber: {
describe: 'First Number',
alias:'f',
demandOption: true, // Required
type: 'number'
},
secondNumber: {
describe: 'Second Number',
alias:'s',
demandOption: true,
type: 'number'
}
},
// Function for your command
handler(argv) {
console.log("Result:",
(argv.firstNumber+argv.secondNumber))
}
})
.check((args,opts)=>{
if(isNaN(args.secondNumber))
throw new Error('ikinci deger sayi olmaliydi') // Buraya kadar sorun yok, handler fonksiyonuna gecebilir
return true
})
.help()
.parse()
bin Özelliği İle Çıkış Komutu Oluşturmak
# mkdir bin_ornegi
# cd bin_ornegi\
# npm init -y
# npm i typescript --save
# npx tsc --init
Oluşan tsconfig.json
dosyasında dönüştürülecek kodların ./dist
dizinine yazılacağını belirtelim:
{
"compilerOptions": {
/* Visit https://aka.ms/tsc/* Basic Options */
// "incremental": true,
"target": "es5",
"module": "commonjs",
// "lib": [],
// "allowJs": true,
// "checkJs": true,
// "jsx": "preserve",
// "declaration": true,
// "declarationMap": true,
// "sourceMap": true,
// "outFile": "./",
"outDir": "./dist",
// "rootDir": "./",
Ve typescript compiler’ı çalıştıralım: npx tsc
Kaynaklar: