Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "`purge` i `minify` działają teraz w Next.js poprzez `@intlayer/swc` — plik `babel.config.js` nie jest wymagany"v9.2.19.08.2026
- "Wypisanie wtyczek Babel w wymaganej kolejności potoku (extract → purge → minify → optimize) w tabelach referencyjnych"v8.12.024.06.2026
- "Dodano `intlayerPurgeBabelPlugin` i `intlayerMinifyBabelPlugin` dla Babel/Webpack; wyjaśnienie działania przepływu wtyczek (pipeline)"v8.12.07.06.2026
- "Dodano opcje `minify` i `purge` do konfiguracji budowania"v8.7.08.04.2026
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimJeśli masz pomysł na ulepszenie tej dokumentacji, zachęcamy do przesłania pull requesta na GitHubie.
Link do dokumentacji na GitHubieKopiuj dokument Markdown do schowka
Optymalizacja Rozmiaru Paczki i Wydajności i18n
Jednym z najczęstszych wyzwań w tradycyjnych rozwiązaniach i18n opartych na plikach JSON jest zarządzanie rozmiarem treści. Jeśli programiści nie rozdzielą treści na przestrzenie nazw (namespaces) ręcznie, użytkownicy często pobierają tłumaczenia dla każdej strony i potencjalnie każdego języka, tylko po to, aby wyświetlić pojedynczą stronę.
Na przykład, aplikacja z 10 stronami przetłumaczonymi na 10 języków może spowodować, że użytkownik pobierze zawartość 100 stron, chociaż potrzebuje tylko jednej (bieżącej strony w bieżącym języku). Prowadzi to do marnowania przepustowości i wolniejszego ładowania.
Intlayer rozwiązuje ten problem poprzez optymalizację w czasie budowania. Analizuje on Twój kod, aby wykryć, które słowniki są faktycznie używane w poszczególnych komponentach, i wprowadza do paczki (bundle) tylko niezbędne treści.
Spis Treści
Przeanalizuj swoją paczkę
Analiza paczki jest pierwszym krokiem do zidentyfikowania "ciężkich" plików JSON i możliwości dzielenia kodu (code-splitting). Narzędzia te generują wizualną mapę drzewa (treemap) skompilowanego kodu aplikacji, co pozwala precyzyjnie zobaczyć, które biblioteki zajmują najwięcej miejsca.
Vite / Rollup
Vite pod maską korzysta z Rollup. Wtyczka rollup-plugin-visualizer generuje interaktywny plik HTML, który pokazuje rozmiar każdego modułu w grafie.
Skopiuj kod do schowka
Skopiuj kod do schowka
Next.js (Turbopack)
Dla projektów korzystających z App Routera i Turbopack, Next.js oferuje wbudowany, eksperymentalny analizator, który nie wymaga dodatkowych zależności.
Skopiuj kod do schowka
Next.js (Webpack)
Jeśli w Next.js korzystasz z domyślnego bundlera Webpack, użyj oficjalnego bundle analyzera. Aktywuje się go, ustawiając odpowiednią zmienną środowiskową w trakcie budowania.
Skopiuj kod do schowka
Skopiuj kod do schowka
Użycie:
Skopiuj kod do schowka
Standardowy Webpack
Dla Create React App (po wykonaniu eject), Angular lub niestandardowych konfiguracji Webpack użyj branżowego standardu webpack-bundle-analyzer.
Skopiuj kod do schowka
Skopiuj kod do schowka
Jak to Działa
Intlayer wykorzystuje podejście per-komponent. W przeciwieństwie do globalnych plików JSON, Twoje treści są definiowane obok komponentów lub wewnątrz nich. Podczas procesu budowania Intlayer wykonuje następujące czynności:
- Analizuje Twój kod w celu znalezienia wywołań funkcji
useIntlayer. - Buduje treść odpowiednich słowników.
- Zamienia wywołanie
useIntlayerna zoptymalizowany kod, zgodnie z Twoją konfiguracją.
Gwarantuje to, że:
- Jeśli komponent nie zostanie zaimportowany, jego treść nie zostanie dołączona do paczki (Dead Code Elimination).
- Jeśli komponent ładuje się leniwie (lazy-loaded), jego zawartość również ładuje się w ten sam sposób.
Informacje o Wtyczkach
Optymalizacja w trakcie budowania przez Intlayer podzielona jest na kilka niezależnych wtyczek, z których każda odpowiada za jedno zadanie. Zrozumienie roli poszczególnych wtyczek zapobiegnie nieporozumieniom podczas ich konfiguracji.
Wtyczki Babel (@intlayer/babel)
Wtyczki te są wykorzystywane bezpośrednio w babel.config.js dla środowisk opartych na Webpacku (Next.js z Babel, CRA, własne konfiguracje Webpack itp.).
Poniższa tabela wymienia je w wymaganej kolejności potoku (tej samej, w jakiej muszą wystąpić w babel.config.js):
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Wtyczka | Działanie |
|---|---|
intlayerExtractBabelPlugin | Skanuje pliki .content.ts i zapisuje skompilowane słowniki w katalogu .intlayer/ |
intlayerPurgeBabelPlugin | Skanuje wszystkie pliki źródłowe, usuwając nieużywane pola treści ze skompilowanych słowników .intlayer/**/*.json |
intlayerMinifyBabelPlugin | Zmienia nazwy kluczy pól treści na krótkie, literowe aliasy (np. title → a) w plikach JSON i kodzie źródłowym |
intlayerOptimizeBabelPlugin | Przepisuje kod useIntlayer('key') → useDictionary(hash) i wstrzykuje import pasującego słownika |
Kolejność wtyczek ma znaczenie. W Twoimbabel.config.jswtyczki purge i minify muszą pojawić się przed wtyczką optimize. Krok optymalizacji zastępuje bowiemuseIntlayer('key')nieprzejrzystym wywołaniemuseDictionary(hash), usuwając informację o kluczu słownika. Właśnie tej informacji potrzebują etapy purge i minify, aby móc określić, które pola są wykorzystywane.
Każda z wtyczek dla Babel ma swój dedykowany helper dla opcji, który odczytuje intlayer.config.ts tylko raz (podczas wczytywania konfiguracji) i zwraca wstępnie rozwiązane wartości:
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Helper opcji | Zastosowanie z wtyczką |
|---|---|
getExtractPluginOptions() | intlayerExtractBabelPlugin |
getPurgePluginOptions() | intlayerPurgeBabelPlugin |
getMinifyPluginOptions() | intlayerMinifyBabelPlugin |
getOptimizePluginOptions() | intlayerOptimizeBabelPlugin |
Wtyczki Vite (vite-intlayer)
Użytkownicy Vite nigdy nie konfigurują ich bezpośrednio. Są one podłączane automatycznie po wywołaniu withIntlayer() w pliku vite.config.ts. Flagi build.purge i build.minify umieszczone w intlayer.config.ts przełączają ich zachowanie bez potrzeby dodatkowego rejestrowania wtyczek.
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Wewnętrzna wtyczka Vite | Odpowiednik zachowania |
|---|---|
| Usage analyzer | Działa jak etap skanowania wtyczki intlayerPurgeBabelPlugin |
| Dictionary prune | Działa jak etap zapisu JSON we wtyczce intlayerPurgeBabelPlugin |
| Dictionary minify | Działa jak etap zapisu JSON we wtyczce intlayerMinifyBabelPlugin |
| Babel transform | Działa jak etap zmiany nazewnictwa z intlayerMinifyBabelPlugin + intlayerOptimizeBabelPlugin |
Wtyczka SWC (@intlayer/swc)
Użytkownicy Next.js również nigdy nie konfigurują tego bezpośrednio. Od wersji 9.2.1 withIntlayer() w next.config.ts uruchamia cały potok — purge, minifikację i przepisywanie importów — wyłącznie na podstawie flag build.purge i build.minify.
Praca jest podzielona na dwie części, ponieważ wtyczka Wasm SWC przekształca jeden plik naraz i nie ma dostępu do systemu plików:
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Przebieg | Gdzie działa | Co robi |
|---|---|---|
| Analiza użycia + purge/minifikacja JSON | Node, wewnątrz withIntlayer() | Czyta każdy plik źródłowy komponentu, przepisuje .intlayer/**/*.json i tworzy tablice zmiany nazw |
Przepisywanie kodu źródłowego (content.title → .a) | @intlayer/swc (Wasm) | Stosuje tablice zmiany nazw do odpowiadających odwołań do właściwości w Twoim kodzie |
Przepisywanie importów (useIntlayer → dict) | @intlayer/swc (Wasm) | Tak samo jak intlayerOptimizeBabelPlugin |
Ustalenie, które pola są nieużywane i jaki alias otrzyma każde z nich, wymaga stanu obejmującego wiele plików oraz operacji wejścia/wyjścia na plikach, więc ta połowa działa w Node; wtyczka SWC otrzymuje jedynie wynikowe tablice.
Konfiguracja wg Platformy
Next.js
Next.js wymaga wtyczki @intlayer/swc, ponieważ Next.js używa SWC do budowania. Od wersji 9.2.1 ten jeden pakiet obsługuje cały potok — optymalizację (przepisywanie importów), purge i minifikację.
Ta wtyczka nie jest instalowana domyślnie, ponieważ wtyczki SWC dla Next.js mają wciąż charakter eksperymentalny. Może się to zmienić w przyszłości.
Next.js 16.1.0 to wersja minimalna. To pierwsze wydanie zbudowane na zgodnym w przód ABI wtyczek Wasm SWC; wcześniejsze wydania odrzucają wtyczkę. withIntlayer odczytuje Twoją wersję Next.js i po prostu nie rejestruje wtyczki poniżej 16.1.0 — takie buildy nadal się udają, po prostu działają bez optymalizacji bundla.
Skopiuj kod do schowka
Skopiuj kod do schowka
Po jej zainstalowaniu Intlayer automatycznie wykryje i wykorzysta tę wtyczkę.
Przebiegi purge i minifikacji (usuwanie i zmiana nazw pól) nie wymagają dodatkowego pakietu ani pliku babel.config.js. Owiń swoją konfigurację funkcją withIntlayer i włącz flagi w intlayer.config.ts:
Skopiuj kod do schowka
Skopiuj kod do schowka
Podczas next build withIntlayer analizuje Twoje źródła, przepisuje skompilowane słowniki i przekazuje wynikowe tablice zmiany nazw pól do @intlayer/swc, które aktualizuje odpowiadające odwołania do właściwości w Twoim kodzie.
Używaj asynchronicznegowithIntlayer, a niewithIntlayerSync. Wariant synchroniczny nie uruchamia potoku analizy, więc purge i minifikacja nie mają z nim żadnego efektu.
Purge i minifikacja działają tylko przynext build— potok optymalizacji jest wyłączony podczasnext dev.
Są też wyłączone, gdy skonfigurowano wywołujących z adapterów kompatybilności (swcExtraCallers, ustawiane przez pakiety kompatybilności takie jak@intlayer/next-intlczy@intlayer/react-i18next): te miejsca wywołań są niewidoczne dla analizatora użycia, więc purge usunąłby pola, które kod nadal odczytuje. Przepisywanie importów pozostaje aktywne.
Wcześniejsze wersje (przed 9.2.1) wymagały @intlayer/babel oraz pliku babel.config.js deklarującego intlayerPurgeBabelPlugin i intlayerMinifyBabelPlugin. Ten plik nie jest już potrzebny i można go usunąć.
Vite
Vite wykorzystuje wtyczkę @intlayer/babel, która jest dostarczana jako zależność pakietu vite-intlayer. Pełen przepływ (pipeline) optymalizacji — przepisywanie importów, purge oraz minify — zostaje domyślnie uaktywniony i nie potrzebuje odrębnej instalacji wtyczek.
Aby uaktywnić flagi purge oraz minify, wskaż to za pomocą opcji w swoim intlayer.config.ts:
Skopiuj kod do schowka
Webpack (i Next.js z użyciem Babel)
Zainstaluj @intlayer/babel:
Skopiuj kod do schowka
Dopisz całą czwórkę wtyczek dla plików środowiska Webpack do babel.config.js w określonym, dobrym porządku:
Skopiuj kod do schowka
Konfiguracja
Możesz kontrolować, w jaki sposób Intlayer optymalizuje Twoją paczkę poprzez propercję build w pliku intlayer.config.ts.
Skopiuj kod do schowka
Zaleca się na ogół pozostawienie wartości domyślnej (undefined) dla opcjioptimize.
Zobacz referencje dotyczące samej konfiguracji po resztę opcji: Konfiguracja
Opcje Budowania
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Właściwość | Typ | Domyślnie | Opis |
|---|---|---|---|
optimize | boolean / undefined | undefined | Włącza przepisanie zajawek importowych. undefined = aktywne tylko w trybie produkcyjnym. Tryb false obali równomiernie opcje z flagi purge i minify. |
minify | boolean | false | Ucina klucze pól w zawartych strukturach opartych o plik w formatach JSON ze zwinnym przepisywaniem kodu o te same elementy alfabetyczne. Zyskuje na znaczeniu, kiedy opcja optimize gra swoją rolę. |
purge | boolean | false | Eliminuje statyczne, niespotykane powiązania we wnętrzu w pełni poddanych analizie kodów źródłowych (eliminując fragmentację plików JSON). Zostaje odrzucone w wypadku, w którym optimize jest false. |
Minifikacja (Zmienianie Nazw Kluczy)
Opcja build.minify nie zminifikuje ogólnej zawartości Twojego JavaScript — tym zajmie się odpowiedni silnik bundlera. Jej wiodącym atutem jest to, iż potrafi znacznie skurczyć same przekształcone tablice opatrzone zwięzłym JSON o krótkie litery wygenerowanego alfabetu:
Skopiuj kod do schowka
Podobnie powiela to swój udział na polu kodu źródłowego, aby w toku procesów budowlanych komenda pokroju content.title zamieniła się nieoczekiwanie w formę typu content.a zachowując idealny ekosystem bezbłędnej relacyjności.
Skopiuj kod do schowka
Minifikacja jest pomijana, gdyoptimizema wartośćfalse. Gdyeditor.enabledma wartośćtrue, nadal działa, ale bez etapu zmiany nazw pól — wizualny edytor odwzorowuje edycje za pomocąkeyPath, więc oryginalne nazwy pól muszą zostać zachowane.
W Next.js minifikacja jest również pomijana, gdy @intlayer/swc nie jest zainstalowany albo nie może zostać załadowany (Next.js poniżej 16.1.0). Wtyczka to ta połowa, która przepisuje odwołania w kodzie źródłowym, więc zmiana nazw w słownikach bez niej pozostawiłaby kod odczytujący nazwy pól, które już nie istnieją.
Ten sam manewr odłożenia ma miejsce w słownikach przywoływanych jako typ opcji z użyciem importMode: 'fetch', gdzie zawarte odpowiedzi napływają niezwłocznie dzięki połączonemu formatowi JSON. Gdyby zastosowano sztuczne przeinaczenie ze stron zewnętrznych, serwer stałby się bezużyteczny z perspektywy klienta i połącznie zostałoby połamane.
Purging (Usuwanie Nieużytych Przestrzeni)
Moduł oznaczający się słowem build.purge dba za to nad śledzeniem rzeczywistego obłożenia zawartych zmiennych i parametrów w paczkach JSON, ucinając puste lub zbyteczne zapytania.
Skopiuj kod do schowka
Przykład: Jeden pospolity słownik wyposażony chociażby o cztery kluczowe pola niepotrzebnego balastu.
Skopiuj kod do schowka
Purge jest pomijany, gdyoptimizema wartośćfalse. Pozostaje aktywny, gdyeditor.enabledma wartośćtrue— usunięte pole nie jest odczytywane przez żaden komponent, więc edytor nigdy go nie renderuje. W Next.js jest dodatkowo pomijany, gdy@intlayer/swcjest niedostępny oraz gdy skonfigurowano wywołujących z adapterów kompatybilności.
Co rzadsze zjawiska również tyczą się tego obejścia - dla niemożności sprawdzenia wycinka czy pospolitych struktur dla useIntlayer - silnik bezbłędnie zablokuje akcję. Przykładowo dla wywołań w niejednoznacznych tablicach powiązanych metod bez destrukturyzacji by zachować słownikową formę naturalną.
Tryby Importowania Słownika
Dla zaawansowanych ekosystemów skategoryzowanych opcją mnogości języków i pokaźną objętościowo rzeszą podstron Twoje tablice JSON mogą mocno oddziaływać na bazowy wyciąg i jego rozmiar końcowy. Aplikując importMode możemy opanować zapytania pobraniowe by temu zapobiegać.
Globalne Zarządzanie Opcją
Możesz w zupełności operować trybem importowania globalnym parametrem skrytym pod przykrywką w Twoim nowym intlayer.config.ts.
Skopiuj kod do schowka
Tryby w Indywidualnych Odłamach Słownikowych
Możesz ustrzec się opcji dla ogólnego użycia poprzez dopisywanie warunkowych ułożeń we wkompilowanych od siebie osobnych elementach .content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}}.
Skopiuj kod do schowka
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Opcja | Pula Formatów | Podstawowo | Informacja Ogólna |
|---|---|---|---|
importMode | 'static', 'dynamic', 'fetch' | 'static' | Przestarzałe: Przełącz swój ekosystem by móc opierać zapytania stricte pod dictionary.importMode. |
Opcja bazująca z formy poleceń pod szyldem importMode dyktuje polecenia operujące mechanikami w Twoim powiązanym komponencie. Może to wpłynąć na tryb globalny i wpisy ze zbiorów poszczególnych dla dictionary.
1. Tryb Zastosowań Statycznych (default)
W ramach trybu użytego dla form static Intlayer podmieni i przekształci naturalne skrótowce useIntlayer wykończonymi formułami słownymi od useDictionary, tym samym ładując bezpośrednio skompilowany ciąg zdarzeniowy.
- Korzyści: Ekspresowe podpięcie od zera. Bezpośrednia relacja nie odpytująca ponownych pobrań w asyście przy trybie nawadniania środowiskowego.
- Mankamenty: Podłączona pod aplikację końcową baza staje się mocno skondensowana. Pobierasz wszystkie dostępne klucze pakietów, ignorując aktualnie wymagane przez dany obszar wytyczne.
- Kiedy Najlepiej Zastosować: Systemy powiązane pod wariant tak zwanej Jednej Strony Aplikacji (SpA).
Przykład Transformacji Skryptowej:
Skopiuj kod do schowka
2. Tryb Obiektowo Dynamiczny
Podejmując wyzwania trybu Dynamic, Intlayer operuje na zapleczu poleceń useDictionaryAsync, ignorując swego poprzednika by przenieść ciężar zapytania przez typ lazy z mechanizmem przypominającym środowisko import() uodparniając specyficznie wymogi dla pliku językowego pod pożądane żądanie lokalne z odpowiednim JSON.
- Korzyści: Skupienie na lokalizacji względem wagi i jej usunięciu (Tree-Shaking). Typowy entuzjasta spolszczonego wariantu otrzyma spójną i pożądaną wyłącznie tablicę z wgranym językiem. Inne wersje nie zostaną użyte dla odciążeń.
- Mankamenty: Aktywuje ułamek żądań na serwer, prosząc sieć o asystę podczas uwadniania strony.
- Kiedy Najlepiej Zastosować: Potężne objętości tekstu, opasłe publikacje tudzież platformy łączące setki państw z prężnym budżetem optymalizacyjnym pakietów.
Przykład Skompresowanego Zastosowania W Wyniku Zdarzeń:
Skopiuj kod do schowka
Mając na karku włączone systemowe rozwiązanie ukierunkowane opcją podimportMode: 'dynamic', pamiętaj, że na jednej powiązanej karcie strony mającej np. ok 100 powiązanych żądań typu odniesieniowego i wzywających formułęuseIntlayerstrona posiłkująca się wybranym standardem wyleje żale w liczbie dokładnie tych samych 100 wywołań. Reaguj zawczasu. Postaraj się sprytnie redukować poszczególne tablice plikami np. ograniczając je w jedną, spójniejszą formułę typu podzbioru dla np. mniejszych wycinków danej strony. Istnieje opcja dodania atutów w postać nadpisywanych wycinków operujących nad tym samym imieniem, które w późniejszym etapie łączą wywołania w postać i strukturę połączonego spoiwa.
3. Zastosowania W Formule Fetch
Kolejny z bliźniaczych w budowie form importowania. Jego nieprzeniknione różnice to typowy pościg powiązany oparty od Live Sync API serwowanym wektorami we wrotach Intlayera, i gdyby napotkał się w trudzie awaryjnym (Błąd Odpowiedzi itd.) by przerzucić resztkę pod standard powiązań od swojego zapasowego formatu dynamicznych form podążających.
Twór Opracowany W Końcowej Generacji Na Poczet Zapytania Z Sieci:
Skopiuj kod do schowka
Zaglądnij do źródeł, jeżeli brakuje Tobie stosownej wiedzy operującej opcjami dla CMS: Rozwiązania Typu CMS
W środowisku opartym modelem o formy z API o parametrze fetch całkowicie ominięte obłożone procesy z grupy eliminowania (purge) i ukrywania z modyfikacjami optycznymi (minify) kluczy tablicy ulegają trwałemu przeistoczeniu, z powodem opartym m.in. użyciu zapytania przez wektor o relacje klucza zachowującego swoje parametry oryginału.
Tabelaryczne Oświadczenie - Statyczny oraz Formuła Dynamiki
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Rodzaj Użytkowej Opcji | Tryb Zapytania (Statyczny) | Typ Zapytania Sieciowego (Dynamiczny) |
|---|---|---|
| Rozmiary Ekosystemu | Rozdmuchane dla opcji wariantów lokalnych. | Skondensowany format pakietowy na tip-top. |
| Wstępne Skalowanie | Momentalny czas reakcyjny z zasobów bundla. | Posiadający zwłoki ułamka od JSON-ów. |
| Asysty Pobrań z Sieci | Wolny od błagania o pobrania w locie z sieci. | Standard to zawsze stosunek 1 klucza. |
| Warianty Oddzielania | Stricte ukierunkowany formą Komponentowych rel. | Łączący wektory z wariantów lokalizacji. |
| Zalety Po Zastosowaniu | Drobne platformy z lekkim wymogiem na front. | Giganty publikujące wpisy z tytanicznym formatem językowym. |
