Zdjęcie artykułu

🥇 NRWL i dlaczego potrzebujemy własnego CLI w JavaScript

9m
Nowy
cli
nx
architektura

Intro

Zanurz się w narzędziu NRWL. Odkryj, jak niestandardowy interfejs wiersza poleceń (CLI) w języku JavaScript podnosi kontrolę i skalowalność projektu.

Prelude

Programiści powszechnie zdobywają umiejętności obsługi interfejsu wiersza poleceń (CLI) w różnych technologiach. Interfejsy wiersza poleceń są integralną częścią stosu technologicznego, automatyzują zadania takie jak generowanie kodu, budowanie i zarządzanie zależnościami. Chociaż często związane z konkretnymi technologiami, interfejsy wiersza poleceń mogą pełnić szersze funkcje w zespole lub projekcie, usprawniając procesy Continuous Integration. Niniejszy artykuł analizuje zalety tego podejścia.

Dlaczego własny CLI?

Jak wspomniano wcześniej, interfejsy wiersza poleceń (CLIs) automatyzują pracę z konkretnymi technologiami, wykonując zadania z poziomu konsoli. Podczas rozwoju, zadania wykraczają poza te związane z konkretną technologią, obejmując aspekty dotyczące całej organizacji, zespołu oraz projektu. Główne korzyści z tworzenia niestandardowego interfejsu wiersza poleceń (custom CLI) w ramach organizacji lub projektu obejmują:

Zwiększenie Efektywności: Interfejs wiersza poleceń umożliwia skrócenie czasu wykonania zadań poprzez pojedyncze polecenia lub skrypty, przyspieszając pracę. Jego potęga tkwi w szybkim i łatwym obsługiwaniu powtarzalnych zadań, co przekłada się na znaczne oszczędności czasu.

🎡 Reprodukowalność: Interfejs wiersza poleceń zapewnia precyzyjne odtwarzanie procesu, eliminując ręczne wykonywanie poszczególnych kroków. Skonsolidowany skrypt zawiera wszystkie kroki, umożliwiając łatwe i spójne ponowne uruchamianie tego samego ciągu działań.

🔀 Udostępnianie: Interfejs wiersza poleceń wspiera współpracę, umożliwiając łatwe udostępnianie z innymi członkami zespołu. Zapewnienie jednolitego dostępu do narzędzi i procedur poprawia spójność pracy zespołowej, zmniejszając błędy wynikające z rozbieżności w narzędziach.

🏗️ Automatyzacja: Interfejs wiersza poleceń ułatwia automatyzację różnorodnych zadań, przyspieszając proces tworzenia oprogramowania. Jest niezbędny przy czynnościach takich jak budowanie, testowanie i wdrażanie aplikacji.

🚏 Skalowalność: Interfejs wiersza poleceń ułatwia skalowanie procesów rozwoju oprogramowania, szczególnie istotne w przypadku dużych projektów. Łatwo umożliwia wykonywanie zadań, takich jak równoczesne uruchamianie wielu serwerów.

Własne, wewnętrzne interfejsy wiersza poleceń tworzą warstwę abstrakcji ponad zewnętrznymi technologiami, procesami firmy i zespołem. To zmniejsza zależności, ułatwia wdrożenie nowych programistów, standaryzuje procesy zespołowe i umożliwia automatyzację.

Zrozumienie konceptu "executors" w NX

Rozszerzenie NRWL (NX) umożliwia tworzenie monorepo dla projektów w języku JavaScript, integrując różnorodne technologie za pomocą wtyczek. Warto zauważyć, że rozszerzenie ułatwia tworzenie niestandardowych wtyczek, umożliwiając generowanie kodu oraz wykonywanie działań (budowanie, testowanie, formatowanie itp.). Te zadania działają w środowisku Node.js, przypominając funkcje projektu. Mogą być uruchamiane zarówno z konsoli NX, jak i z terminala, efektywnie tworząc interfejs wiersza poleceń w ramach projektu.

Zacznijmy od zainstalowania dedykowanej paczki @nrwl/nx-plugin@latestpet. Następnie musimy wygenerować kod naszej własnej wtyczki za pomocą poniższego polecenia: nx g @nrwl/nx-plugin:plugin [nazwa-mojej-wtyczki].

Teraz zajmijmy się konceptem Task Executors. Aby wykonać polecenia w terminalu, użyj nx run [projekt] [polecenie] lub nx [polecenie] [projekt]. Tutaj projekt odnosi się do projektu w monorepo, a polecenie oznacza zadanie NodeJS, które ma zostać uruchomione.

Ponadto, dla środowisk produkcji lub testowego, dostosuj konfiguracje: nx [polecenie] [projekt] --configuration=[konfiguracja].

Co więcej, dodatkowe parametry są dostosowalne: nx [polecenie] [projekt] --[mójParametrNiestandardowy]=[wartośćMojegoParametruNiestandardowego].

Tworzenie własnego "executora" w NX

Aby zaimplementować określone polecenie, użyj: nx generate @nrwl/nx-plugin:executor [check] --project=[moja-wtyczka]. Tutaj [moja-wtyczka] reprezentuje wcześniej utworzoną wtyczkę, a [check] oznacza nazwę zadania.

Po wykonaniu polecenia, repozytorium powinno prezentować następującą strukturę folderów/plików:

Ładowanie

Struktura folderów/plików

Centralny plik konfiguracyjny, schema.json, pełni rolę głównego pliku, zawierającego istotne metadane dla twojego "executora". Obejmuje to opisy parametrów dedykowanego zadania, które mogą być opcjonalne, z opcjami wyboru wielu lub konkretnych wartości.

Ładowanie

Fundamentalna logika znajduje się w pliku executor.ts.

Ładowanie

W implementacji, eksportujemy funkcję zwracającą obiekt z flagą success, oznaczającą status ukończenia. Funkcja przyjmuje opcje przekazane przez CLI jako pierwszy argument oraz kontekst wykonania (wskazujący na uruchomiony projekt) jako drugi parametr.

Ostatnim krokiem jest przypisanie zadania do konkretnego projektu, co można osiągnąć w pliku project.json w sekcji target.

Ładowanie

Wykonaj zadanie, używając polecenia nx run [mój-projekt]:[check].

Zrozumienie generatorów kodu

Generatory oferują uproszczone podejście do automatyzacji wielu zadań integralnych dla twojej pracy. Czy to dotyczy tworzenia szablonów dla komponentów i funkcji, zapewniania precyzyjnego generowania i organizowania bibliotek, czy aktualizowania plików konfiguracyjnych, generatory odgrywają kluczową rolę w standaryzacji tych procesów przy pomocy niezawodnej i spójnej metodologii.

Istnieją trzy główne rodzaje generatorów:

🛫 Generatory rozszerzające kod projektu podczas instalacji wtyczki

Takie generatory są wywoływane podczas wykonywania polecenia: npm i [wtyczka].

🛠️ Generatory lokalne

Generatory tworzące szablony dla komponentów, usług, funkcji, itp... Mają następujący schemat wywołania: nx generate [wtyczka]:[nazwa-generatora] [opcje].

🚀 Generatory aktualizacji

Wywoływane przez NX podczas ich aktualizacji w celu utrzymania plików konfiguracyjnych zsynchronizowanych z najnowszymi wersjami narzędzi. Ten generator jest wywoływany podczas wykonywania polecenia: nx migrate [wtyczka].

Tworzenie własnego generatora NX

Aby utworzyć własny generator, wykonaj następujące polecenie: nx generate @nrwl/nx-plugin:generator [moj-generator] --project=[moja-wtyczka], gdzie [moja-wtyczka] to nazwa wcześniej utworzonej wtyczki, a [moj-generator] to nazwa generatora.

Generator utworzy strukturę projektu w pliku jak poniżej:

Ładowanie

Struktura folderów/plików

Plik generator.ts zawiera całą logikę generatora. Zawiera funkcję wywoływaną do manipulacji drzewem systemu plików. Plik schema.json zawiera opis generatora, dostępne opcje, informacje walidacyjne i domyślne wartości (podobnie jak w przypadku "executora").

Ładowanie

Parametr tree reprezentuje strukturę plików i umożliwia usuwanie, dodawanie i edytowanie plików. Devkit dostarcza różne narzędzia ułatwiające pracę z plikami. Na przykład w powyższym przykładzie funkcja installPackageTask instaluje pakiety Node. Dodatkowo, w ramach naszego niestandardowego generatora, możemy korzystać z innych generatorów. Funkcja libraryGenerator, na przykład, tworzy bibliotekę na podstawie innego generatora.

Ładowanie

Obiekt $default służy do odczytu argumentów wiersza polecenia przekazywanych do generatora. Aby uruchomić stworzony w ten sposób generator, użyj wiersza polecenia w następujący sposób: nx generate @myorg/[moja-wtyczka]:[moj-generator] [mojalib].

Dodawanie pakietów na npm

W ramach rozszerzenia NRWL, możemy również utworzyć pakiet NPM, który pełni rolę interfejsu wiersza poleceń z funkcjonalnościami niezależnymi od konkretnego projektu. Taki interfejs wiersza poleceń może zapewnić standaryzację w zespole lub nawet w całej organizacji, obejmując:

  • ⛴️ konfigurację środowiska pracy, instalację odpowiednich wersji narzędzi, zgodnych z tymi używanymi przez innych programistów,
  • 🛸 tworzenie projektów zgodnie z ustalonym schematem stosowanym w projekcie.

Jak stworzyć własny pakiet NPM?

Aby utworzyć bibliotekę w języku JavaScript, użyj polecenia: nx generate @nrwl/workspace:library [moje-cli] --buildable.

Aby ułatwić przekazywanie argumentów do konsoli, możemy użyć dodatkowego pakietu NPM o nazwie yargs. Zainstaluj to narzędzie poleceniem: npm install yargs.

W folderze biblioteki utwórz katalog bin, a w nim plik o nazwie moje-cli.js o następującej zawartości:

Ładowanie

Pozwala to odwoływać się do źródła interfejsu wiersza poleceń, które będzie znajdować się pod ścieżką src/lib/cli.js. Zawartość może wyglądać tak:

Ładowanie

Ta konfiguracja zapewnia nam polecenie init, z parametrem nazwy (alias n), wywołujące funkcję workspaceInit, która może zawierać logikę tworzenia projektu. Na przykład, inicjalizując workspace NX.

Przed opublikowaniem biblioteki w rejestrze NPM, wystarczy odpowiednio ją skonfigurować.

Ładowanie

Ta konfiguracja pozwala, po opublikowaniu i zainstalowaniu globalnie pakietu NPM, używać niestandardowego interfejsu wiersza poleceń poprzez wykonanie następującego polecenia w wierszu poleceń: moje-cli init --name=[nowy-projekt].

Dodatkowe spojrzenie architekta!

Jeśli spodobał ci się ten artykuł, śmiało eksploruj powiązane tematy:

🌟 Dream Stack for React Dev

🥇 Overview of the Key Features in NX Tool

⭐ Modular Architecture for Medium Frontend Apps

Podsumowanie

Niestandardowe interfejsy wiersza poleceń (CLIs) oferują obszerne możliwości standaryzacji i automatyzacji w przepływach pracy projektowych. Narzędzie monorepo NRWL Extension rozszerza te możliwości, umożliwiając tworzenie i rozwijanie interfejsów wiersza poleceń od projektu po całą organizację. Niniejszy artykuł zagłębia się w podstawy tworzenia i wykorzystywania interfejsów wiersza poleceń.

Jestem z tych, którzy publikują codziennie!

Mam nadzieję, że mój wpis Ci się spodobał. Jeżeli tak jest, to zapraszam Cię na mój LinkedIn, gdzie publikuję codziennie.

Komentarze

Przejrzyj komentarze artykułu i dodaj swoją opinię.

stworzono: 14-11-2023
zmieniono: 14-11-2023