<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>JavaScript | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/javascript/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Fri, 24 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/javascript/index.xml" rel="self" type="application/rss+xml"/><item><title>Aspire 13.2 dodaje Bun, lepsze kontenery i mniej tarcia przy debugowaniu</title><link>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/aspire-132-bun-container-enhancements/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/aspire-132-bun-container-enhancements/</guid><description>Aspire 13.2 dodaje pełnoprawne wsparcie dla Bun w aplikacjach Vite, poprawia niezawodność Yarn i wprowadza ulepszenia kontenerów, które sprawiają, że lokalne środowisko zachowuje się bardziej uczciwie. Oto, co naprawdę się zmieniło i dlaczego ma to znaczenie.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Kliknij &lt;a href="https://thedotnetblog.com/pl/news/emiliano-montesdeoca/aspire-132-bun-container-enhancements/"&gt;tutaj&lt;/a&gt;, aby zobaczyć oryginalną wersję.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jeśli budujesz w Aspire backendy .NET z frontendami JavaScript, to 13.2 jest takim wydaniem, które po cichu poprawia Ci dzień. Bez efektownych nowych paradygmatów. Po prostu solidne usprawnienia rzeczy, które były tylko trochę irytujące.&lt;/p&gt;
&lt;p&gt;Spójrzmy, co faktycznie trafiło do wydania.&lt;/p&gt;
&lt;h2 id="bun-jest-teraz-pełnoprawny"&gt;Bun jest teraz pełnoprawny&lt;/h2&gt;
&lt;p&gt;Najważniejsza nowość: wsparcie Bun dla aplikacji Vite w Aspire. Jedno płynne wywołanie i gotowe.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// TypeScript AppHost
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withBun&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Jeśli Twój zespół już używa Bun — a pewnie używa, biorąc pod uwagę znacznie szybsze instalacje i start — Aspire nie zmusza Cię już do walki pod prąd. Wcześniej Aspire zakładał npm i trzeba było to obejść. Teraz &lt;code&gt;.withBun()&lt;/code&gt; jest opcją pierwszej kategorii obok &lt;code&gt;.withYarn()&lt;/code&gt; i domyślnego zachowania npm.&lt;/p&gt;
&lt;p&gt;Dlaczego to ważne? Bo szybkość narzędzi JavaScript bezpośrednio wpływa na Twój inner dev loop. Jeśli frontend potrzebuje 30 sekund na instalację zależności za każdym razem, gdy stawiasz nowe środowisko, to zaczyna się to kumulować. Bun mocno to skraca.&lt;/p&gt;
&lt;p&gt;Odpowiedniki AppHost w C# są opisane na &lt;a href="https://aspire.dev/integrations/frameworks/javascript/#use-bun"&gt;aspire.dev&lt;/a&gt;, jeśli wolisz pisać w C# — te same wzorce nadal obowiązują.&lt;/p&gt;
&lt;h2 id="yarn-stał-się-bardziej-niezawodny"&gt;Yarn stał się bardziej niezawodny&lt;/h2&gt;
&lt;p&gt;Bun zgarnia nagłówki, ale użytkownicy Yarn dostają coś być może jeszcze ważniejszego: mniej tajemniczych awarii. Aspire 13.2 poprawia niezawodność &lt;code&gt;withYarn()&lt;/code&gt; wraz z &lt;code&gt;addViteApp()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Takie poprawki nie brzmią ekscytująco, dopóki nie spędzisz 20 minut na szukaniu, dlaczego frontend oparty na Yarn nie chce się uruchomić. Można uznać temat za załatwiony.&lt;/p&gt;
&lt;h2 id="publikowanie-kontenerów-które-naprawdę-da-się-ogarnąć"&gt;Publikowanie kontenerów, które naprawdę da się ogarnąć&lt;/h2&gt;
&lt;p&gt;Dwie poprawki związane z kontenerami, które warto znać:&lt;/p&gt;
&lt;h3 id="jawna-polityka-pull"&gt;Jawna polityka pull&lt;/h3&gt;
&lt;p&gt;Publikowanie przez Docker Compose obsługuje teraz &lt;code&gt;PullPolicy&lt;/code&gt;, w tym opcję &lt;code&gt;Never&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ImagePullPolicy&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addDockerComposeEnvironment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;compose&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addContainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;worker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;myorg/worker:latest&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withImagePullPolicy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ImagePullPolicy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Never&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To jest ten workflow, który mówi: „użyj obrazu, który już zbudowałem, i zostaw rejestr w spokoju”. Bardzo przydatne, gdy lokalnie iterujesz nad obrazami budowanymi i publikowanymi ręcznie albo gdy CI produkuje obraz i chcesz, żeby Compose użył dokładnie tego obrazu, bez ukradkowego pobierania zdalnego.&lt;/p&gt;
&lt;h3 id="wolumeny-postgresql-18-znów-działają"&gt;Wolumeny PostgreSQL 18+ znów działają&lt;/h3&gt;
&lt;p&gt;PostgreSQL 18 zmienił wewnętrzny układ katalogu danych. To po cichu zepsuło mapowanie wolumenów w Aspire — wolumen danych był tworzony, ale trwałość danych nie działała prawidłowo. 13.2 to naprawia.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withDataVolume&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;isReadOnly&lt;/span&gt;: &lt;span class="kt"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Jeśli uruchamiasz PostgreSQL 18 lub nowszy z wolumenem danych, zaktualizuj do Aspire 13.2 i nie wracaj do tego tematu.&lt;/p&gt;
&lt;h2 id="usprawnienia-debugowania-które-realnie-ułatwiają-życie"&gt;Usprawnienia debugowania, które realnie ułatwiają życie&lt;/h2&gt;
&lt;p&gt;Kilka rzeczy, które sprawiają, że krokowe przechodzenie przez sesję AppHost jest mniej frustrujące:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DebuggerDisplayAttribute&lt;/code&gt; dla typów core&lt;/strong&gt; — &lt;code&gt;DistributedApplication&lt;/code&gt;, zasoby i wyrażenia endpointów pokazują teraz przydatne wartości w debugerze zamiast zmuszać do przekopywania się przez drzewka obiektów&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lepsze komunikaty błędów &lt;code&gt;WaitFor&lt;/code&gt;&lt;/strong&gt; — gdy zasoby nie startują, kontekst błędu jest teraz naprawdę pomocny&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BeforeResourceStartedEvent&lt;/code&gt; odpala się we właściwym momencie&lt;/strong&gt; — tylko wtedy, gdy zasób faktycznie zaczyna się uruchamiać, a nie przy niezwiązanych zmianach stanu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;launchSettings.json&lt;/code&gt; jest bardziej odporny&lt;/strong&gt; — mniejsze ryzyko, że uszkodzona konfiguracja zepsuje start środowiska deweloperskiego&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Żadna z tych zmian nie jest samodzielnie przełomowa, ale razem usuwają tarcie z doświadczenia debugowania. Jeśli kiedykolwiek musiałeś zejść trzy poziomy w dół do obiektu zasobu Aspire, żeby sprawdzić, jakiego endpointu używa, to samo ulepszenie debugger display jest warte aktualizacji.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 to wydanie skupione na jakości. Wsparcie Bun jest nagłówkiem, ale to ulepszenia kontenerów i debugowania sprawią, że codzienna praca będzie płynniejsza. Warto zaktualizować — szczególnie jeśli używasz PostgreSQL 18 z wolumenami danych.&lt;/p&gt;
&lt;p&gt;Szczegóły znajdziesz w &lt;a href="https://devblogs.microsoft.com/aspire/aspire-bun-support-and-container-enhancements/"&gt;oryginalnym wpisie Davida Pine&amp;rsquo;a&lt;/a&gt; oraz w &lt;a href="https://aspire.dev/whats-new/aspire-13-2/"&gt;dokumentacji nowości Aspire 13.2&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>