Mam serwer WWW napisany w Node.js i chciałbym uruchomić z określonego folderu. Nie jestem pewien, jak uzyskać dostęp do argumentów w JavaScript. Korzystam z takiego węzła
$ node server.js folder
oto server.js
mój kod serwera. Pomoc Node.js mówi, że jest to możliwe:
$ node -h
Usage: node [options] script.js [arguments]
Jak mam uzyskać dostęp do tych argumentów w JavaScript? Jakoś nie udało mi się znaleźć tych informacji w Internecie.
process.argv[n]
gdzien
jest indeks zerowynode [options] [ -e script | script.js ] [arguments]
lubnode debug script.js [arguments]
. na przykład:node --harmony script.js balala
lubnode --no-deprecation --enable-ssl2 script.js balala
możemy użyć process.execArgv z process.argvAby znormalizować argumenty, jakie otrzymywałaby zwykła funkcja javascript, robię to w skryptach powłoki node.js:
Zauważ, że pierwszy argument jest zwykle ścieżką do nodejs, a drugi argument jest lokalizacją wykonywanego skryptu.
źródło
var args = process.argv.splice(process.execArgv.length + 2);
// ponieważ istnieją wyjątki od użycia polecenia węzła, na przykład:node --harmony script.js balala
. patrz process.execArgvexecArgv
to nie wargv
tak na 2 wystarczaprocess.argv.splice(process.execArgv.length + 2)
: dla polecenianode --harmony script.js --version
,process.argv
jest['/usr/local/bin/node', 'script.js', '--version']
. Flagi NIEnode
są uwzględnione w !process.argv
Aktualna poprawna odpowiedź na to, aby użyć biblioteki minimalistycznej . Kiedyś używaliśmy optymalizatora węzłów, ale od tego czasu jest on przestarzały.
Oto przykład tego, jak z niego korzystać zaczerpnięty z dokumentacji minimalistycznej:
-
-
źródło
Odpowiedź na 2018 r. W oparciu o aktualne trendy na wolności:
Analiza argumentów Vanilla javascript:
Zwraca to:
Oficjalne dokumenty
Najczęściej używane pakiety NPM do analizy argumentów:
Minimalist : minimalne przetwarzanie argumentów.
Commander.js : Najczęściej stosowany moduł do analizy argumentów.
Meow : Lżejsza alternatywa dla Commander.js
Yargs : Bardziej wyrafinowane parsowanie argumentów (ciężkie).
Vorpal.js : dojrzałe / interaktywne aplikacje wiersza polecenia z analizą argumentów.
źródło
Optymista (optymista węzła)
Sprawdź bibliotekę optymistów , jest znacznie lepsza niż ręczne analizowanie opcji wiersza poleceń.
Aktualizacja
Optymista jest przestarzały. Wypróbuj yargs, który jest aktywnym widelcem optymisty.
źródło
Kilka świetnych odpowiedzi tutaj, ale wszystko wydaje się bardzo złożone. Jest to bardzo podobne do tego, w jaki sposób skrypty bash uzyskują dostęp do wartości argumentów i jak już zauważył MooGoo, jest już standardowo wyposażony w node.js. (Aby uczynić to zrozumiałym dla kogoś, kto jest nowy w node.js)
Przykład:
źródło
Commander.js
Działa świetnie do definiowania opcji, akcji i argumentów. Generuje również strony pomocy dla Ciebie.
Natychmiast
Działa doskonale do uzyskiwania informacji od użytkownika, jeśli podoba Ci się podejście zwrotne.
Co-Monituj
Działa doskonale do uzyskiwania danych wejściowych od użytkownika, jeśli podoba Ci się podejście generatora.
źródło
Brak bibliotek lib z flagami sformatowanymi w prosty obiekt
Przykłady
Prosty
Wejście
wynik
Prawdziwy świat
Wejście
wynik
źródło
= longArg[1]
możesz napisać.= longArg.length > 1 ? longArg[1] : true;
Pozwoliłoby to przekazać ten typ argumentu:node config/build.js --flag1 --flag2
Biblioteka Stdio
Najłatwiejszym sposobem analizowania argumentów wiersza poleceń w NodeJS jest użycie modułu stdio . Zainspirowany
getopt
narzędziem UNIX jest tak trywialny jak:Jeśli uruchomisz poprzedni kod za pomocą tego polecenia:
Następnie
ops
obiekt będzie wyglądał następująco:Możesz więc używać go tak, jak chcesz. Na przykład:
Obsługiwane są również opcje zgrupowane, więc możesz pisać
-om
zamiast-o -m
.Ponadto
stdio
może automatycznie generować dane wyjściowe dotyczące pomocy / użytkowania. Jeśli zadzwoniszops.printHelp()
, otrzymasz:Poprzedni komunikat jest wyświetlany także wtedy, gdy nie podano obowiązkowej opcji (poprzedzona komunikatem o błędzie) lub jeśli jest niepoprawnie określona (na przykład, jeśli podasz pojedynczy argument dla opcji i potrzebuje 2).
Możesz zainstalować moduł stdio za pomocą NPM :
źródło
Jeśli skrypt nazywa się myScript.js i chcesz przekazać imię i nazwisko „Sean Worthington” jako argumenty takie jak poniżej:
Następnie w swoim skrypcie piszesz:
źródło
Argument wiersza poleceń jest wart spojrzenia!
Możesz ustawić opcje za pomocą głównych standardów notacji ( dowiedz się więcej ). Wszystkie te polecenia są równoważne, ustawiając te same wartości:
Aby uzyskać dostęp do wartości, najpierw utwórz listę definicji opcji opisującą opcje akceptowane przez aplikację.
type
Nieruchomość jest funkcją seter (wartość dostarczana jest przepuszczany przez to), co daje pełną kontrolę nad wartością otrzymanej.Następnie przeanalizuj opcje za pomocą komendy CommandLineArgs () :
options
teraz wygląda następująco:Zaawansowane użycie
Oprócz powyższego typowego użycia można skonfigurować argumenty wiersza polecenia, aby akceptować bardziej zaawansowane formularze składniowe.
Składnia oparta na poleceniach (styl git) w postaci:
Na przykład.
Składnia polecenia i polecenia podrzędnego (styl dokera) w postaci:
Na przykład.
Generowanie przewodnika użytkowania
Przewodnik użytkowania (zwykle drukowany, gdy
--help
jest ustawiony) można wygenerować za pomocą użycia wiersza polecenia . Zobacz poniższe przykłady i przeczytaj dokumentację aby uzyskać instrukcje dotyczące ich tworzenia.Typowy przykład instrukcji użytkowania.
Przewodnik użytkowania polimeru-cli jest dobrym przykładem z życia.
Dalsza lektura
Jest jeszcze wiele do nauczenia się, zobacz przykłady i dokumentację na wiki .
źródło
partial
istopAtFirstUnknown
. Zobacz dokumenty .Jest na to aplikacja. Cóż, moduł. Cóż, więcej niż jeden, prawdopodobnie setki.
Yargs jest jednym z zabawnych, jego dokumenty są fajne do czytania.
Oto przykład ze strony github / npm:
Wyjście jest tutaj (odczytuje opcje z myślnikami itp., Krótkie i długie, numeryczne itp.).
źródło
Oto moje rozwiązanie 0-dep dla nazwanych argumentów:
Przykład:
Uwaga: Oczywiście to się nie powiedzie, gdy argument zawiera
=
. Jest to tylko bardzo proste użycie.źródło
Prawdopodobnie dobrym pomysłem jest zarządzanie konfiguracją w sposób scentralizowany przy użyciu czegoś takiego jak nconf https://github.com/flatiron/nconf
Pomaga w pracy z plikami konfiguracyjnymi, zmiennymi środowiskowymi, argumentami wiersza poleceń.
źródło
bez librairies: using Array.prototype.reduce ()
dla tego polecenia
node index.js count=2 print debug=false msg=hi
również,
możemy zmienić
przez (znacznie dłużej)
automatycznie parsować wartość logiczną i liczbę
źródło
count
ic
opcje wiersza poleceń (c
jako alias / skrótcount
)?Przekazywanie, analizowanie argumentów jest łatwym procesem. Węzeł udostępnia właściwość process.argv, która jest tablicą ciągów, które są argumentami, które zostały użyte podczas wywołania węzła. Pierwszy wpis w tablicy to plik wykonywalny Node, a drugi to nazwa twojego skryptu.
Jeśli uruchomisz skrypt z poniższymi narzędziami
Plik: args.js
Otrzymasz tablicę jak
źródło
Jeśli chcesz uruchomić coś takiego:
-
Lub coś takiego:
-
źródło
proj.js
Terminal:
Wynik:
Wyjaśnienie:
0
: Katalog node.exe na twoim komputerze (C: \ Program Files \ nodejs \ node.exe ')1
: Katalog pliku projektu. (proj.js)2
: Twój pierwszy argument do węzła (arg1)3
: Twój drugi argument do węzła (arg2)4
: Twój trzeci argument do węzła (arg3)twoje rzeczywiste argumenty zaczynają się
2nd
od indeksuargv
tablicy, to znaczyprocess.argv[2]
.źródło
Możesz dotrzeć do argumentów wiersza poleceń za pomocą
system.args
. Korzystam z poniższego rozwiązania, aby parsować argumenty w obiekt, dzięki czemu mogę uzyskać nazwę według nazwy.teraz nie musisz znać indeksu argumentu. użyj tego jak
args.whatever
źródło
map
właściwość jest niezdefiniowana.Możesz przeanalizować wszystkie argumenty i sprawdzić, czy istnieją.
plik: parse-cli-arguments.js:
Niż po prostu zrób:
źródło
Bez bibliotek
Jeśli chcesz to zrobić w waniliowym JS / ES6, możesz użyć następującego rozwiązania
pracował tylko w NodeJS> 6
I to polecenie
da następujący wynik
ps Proszę poprawić kod na mapie i zmniejszyć funkcję, jeśli znajdziesz bardziej eleganckie rozwiązanie, dzięki;)
źródło
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Chociaż powyższe odpowiedzi są idealne, a ktoś już zasugerował yargs, korzystanie z pakietu jest naprawdę łatwe. Jest to ładny pakiet, który sprawia, że przekazywanie argumentów do wiersza poleceń jest naprawdę łatwe.
Proszę odwiedzić https://yargs.js.org/, aby uzyskać więcej informacji.
źródło
Przekazywanie argumentów jest łatwe, a ich otrzymywanie to tylko kwestia odczytu procesu. Tablicaargv Węzeł udostępnia w zasadzie z każdego miejsca. Ale na pewno chcesz je odczytać jako pary klucz / wartość, więc potrzebujesz fragmentu skryptu, aby go zinterpretować.
Joseph Merdrignac opublikował piękny, używając redukcji, ale opierał się na
key=value
składni zamiast-k value
i--key value
. Przepisałem go o wiele bardziej brzydko i dłużej, aby użyć tego drugiego standardu, i opublikuję go jako odpowiedź, ponieważ nie zmieści się jako komentarz. Ale wykonuje zadanie.Za pomocą tego kodu polecenie
node script.js alpha beta -charlie delta --echo foxtrot
dałoby ci następujący obiektźródło
Najprostszym sposobem wyszukiwania argumentów w Node.js jest tablica process.argv. Jest to obiekt globalny, którego można używać bez importowania dodatkowych bibliotek, aby z niego korzystać. Musisz po prostu przekazać argumenty do aplikacji Node.js, tak jak pokazaliśmy wcześniej, a argumenty te można uzyskać w aplikacji za pośrednictwem tablicy process.argv.
Pierwszym elementem tablicy process.argv zawsze będzie ścieżka systemu plików wskazująca plik wykonywalny węzła. Drugi element to nazwa wykonywanego pliku JavaScript. Trzeci element to pierwszy argument przekazany przez użytkownika.
Cały ten skrypt wykonuje pętlę przez tablicę process.argv i drukuje indeksy wraz z elementami przechowywanymi w tych indeksach. Jest to bardzo przydatne do debugowania, jeśli kiedykolwiek zastanawiasz się, jakie argumenty otrzymujesz iw jakiej kolejności.
Możesz także używać bibliotek takich jak yargs do pracy z argumentami commnadline.
źródło
Rozwiązanie TypeScript bez bibliotek:
Wejście:
ts-node index.js -p param --parameter parameter
Wynik:
{ p: 'param ', parameter: 'parameter' }
źródło
process.argv
jest twoim przyjacielem, przechwytywanie argumentów wiersza poleceń jest natywnie obsługiwane w Node JS. Zobacz przykład poniżej:źródło
jak podano w dokumentach węzła Właściwość process.argv zwraca tablicę zawierającą argumenty wiersza poleceń przekazane podczas uruchamiania procesu Node.js.
Na przykład zakładając następujący skrypt dla procesu-args.js:
Uruchamianie procesu Node.js jako:
Wygeneruje wynik:
źródło
Większość ludzi udzieliła dobrych odpowiedzi. Chciałbym również coś tutaj wnieść. Podaję odpowiedź za pomocą
lodash
biblioteki, aby iterować wszystkie argumenty wiersza poleceń, które przekazujemy podczas uruchamiania aplikacji:Aby uruchomić powyżej kodu, uruchom następujące polecenia:
Wynik będzie:
źródło
Najlepszym sposobem przekazania argumentów wiersza poleceń do programu Node.js jest użycie interfejsu wiersza poleceń (CLI)
Istnieje fajny moduł npm o nazwie nodejs-cli , którego możesz użyć.
Jeśli chcesz stworzyć taki bez żadnych zależności, mam go na Githubie, jeśli chcesz to sprawdzić, to jest naprawdę prosty i łatwy w użyciu, kliknij tutaj .
źródło
Rozwiązanie niezależne od stylu ES6:
źródło