tsdkbundle: Wspierane przez Bun pakowanie wielu plików TypeScript
Przepływ pracy oparty na Bun do pakietów TypeScript z wieloma plikami, zawierający ustawienia domyślne do budowania lokalnego oraz weryfikacji artefaktów w środowisku CI.
To przewodnictwo odbudowuje funkcjonalną ścieżkę dla: tsdkbundle: Multi-Entry Bundler typu TypeScript oparty na Bun. Skupiamy się na umowach, sprawdzeniach oraz kodzie, który można bez problemu dodać do repozytorium, nie musząc zgadywać intencji twórcy. Aby uzyskać ogólny obraz, należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Wolimy małe, testowalne jednostki nad rozbudowane skrypty. Gdy jakiś krok zawiedzie, powód awarii powinien wskazywać na konkretną odpowiedzialność.
src/
├── index.ts # API service
├── worker.ts # Async worker
└── scripts/
└── migrate.ts # Database migration
export default {
projects: {
backend: {
target: "node",
entry: ["src/index.ts", "src/worker.ts", "src/scripts/migrate.ts"],
},
},
};
bundle dev backend
bundle build backend
npm i tsdkbundle -D
Dlaczego Bun?
Dla projektu Why Bun? należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nazwij poszczególne elementy, zdefiniuj kryteria sukcesu i odrzuć ciche, częściowe ukończenie zadania. Zrozum, co naprawdę blokuje pętlę zdarzeń, a co jedynie czeka. Klasyczną pułapką są wyjątki synchroniczne.
Zastosowania
W przypadku scenariuszy użycia należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Zapisuj czas trwania i koszty obok wyników funkcjonalnych. Wczesna widoczność zapobiega nieoczekiwanym rachunkom w środowiskach współdzielonych. Trzeba zrozumieć, co naprawdę blokuje pętlę zdarzeń, a co jedynie czeka. Wyjątki synchroniczne stanowią klasyczną pułapkę.
Listwa kontrolna operacyjna
Dla listwy kontrolnej operacyjnej należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu.
Zdokumentuj razem ścieżkę prawidłowego działania oraz ścieżkę naprawczą. Próby ponownych działań i obsługa wiadomości błędnych stanowią część produktu.
Należy preferować ustrukturyzowane wzorce współbieżności zamiast obietnic typu „fire-and-forget”, które ukrywają błędy.
Lepiej mieć nudną, niezawodną architekturę niż genialne, jednorazowe demonstracje.
Należy preferować małe, testowalne jednostki zamiast rozbudowanych skryptów. Gdy jakiś krok się nie powiedzie, błąd powinien wskazywać na konkretną odpowiedzialność.
Należy preferować ustrukturyzowane wzorce współbieżności zamiast obietnic typu „fire-and-forget”, które ukrywają błędy.
Zanim zastosuje się nową wersję, należy zamrozić istniejące wersje, utrwalić kluczowe informacje dotyczące krytycznej ścieżki oraz potwierdzić kroki odwracające zmiany. Środowiska współdzielone wymagają ograniczeń szybkości, weryfikacji uprawnień oraz wyraźnego odpowiedzialnego za rotację haseł.
Aby wzmocnić bezpieczeństwo, należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić dany krok na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu systemu.
Zachowaj konfigurację poza kodem aplikacji. Pliki środowiskowe, magazyny sekretów oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą audytować.
Zdefiniuj wersje runtime i zapisz digest odpowiadający wersji użytej do uruchomienia demo.