Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Ta dokumentacja jest nieaktualna, wersja bazowa została zaktualizowana w 24 czerwca 2026.
Przejdź do angielskiej wersji dokumentuHistoria wersji
- "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 angielskimIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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
npm install -D rollup-plugin-visualizerSkopiuj kod do schowka
import { defineConfig } from "vite";import { visualizer } from "rollup-plugin-visualizer";export default defineConfig({ plugins: [ visualizer({ open: true, // Automatycznie otwórz raport w przeglądarce filename: "stats.html", gzipSize: true, brotliSize: true, }), ],});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.).
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/ |
intlayerOptimizeBabelPlugin | Przepisuje kod useIntlayer('key') → useDictionary(hash) i wstrzykuje import pasującego słownika |
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 |
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 |
getOptimizePluginOptions() | intlayerOptimizeBabelPlugin |
getPurgePluginOptions() | intlayerPurgeBabelPlugin |
getMinifyPluginOptions() | intlayerMinifyBabelPlugin |
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 |
Konfiguracja wg Platformy
Next.js
Next.js wymaga instalacji wtyczki @intlayer/swc na etapie optymalizacji (przepisywania importów), ponieważ Next.js wykorzystuje do budowania SWC.
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.
Skopiuj kod do schowka
npm install -D @intlayer/swcPo jej zainstalowaniu Intlayer automatycznie wykryje i wykorzysta tę wtyczkę.
Do przejścia etapów purge i minify (usuwania i skracania pól), należy zainstalować równolegle @intlayer/babel i dodać wtyczki Babel. Choć Next.js do transformacji korzysta z SWC, wciąż interpretuje babel.config.js w zakresie konfiguracji wtyczek, co sprawia, że wtyczki dla Babel uruchamiane są jeszcze przed etapem SWC.
Skopiuj kod do schowka
npm install -D @intlayer/babelSkopiuj kod do schowka
const { intlayerPurgeBabelPlugin, intlayerMinifyBabelPlugin, getPurgePluginOptions, getMinifyPluginOptions,} = require("@intlayer/babel");module.exports = { presets: ["next/babel"], plugins: [ // Purge: usuwa nieużywane pola ze słowników z .intlayer/**/*.json [intlayerPurgeBabelPlugin, getPurgePluginOptions()], // Minify: skraca nazwy kluczy w polach w plikach JSON i kodzie źródłowym [intlayerMinifyBabelPlugin, getMinifyPluginOptions()], // Uwaga: intlayerOptimizeBabelPlugin NIE JEST TUTAJ POTRZEBNY, ponieważ // to @intlayer/swc obsługuje zastępowanie useIntlayer → useDictionary. ],};Konfiguracja
Możesz kontrolować, w jaki sposób Intlayer optymalizuje Twoją paczkę poprzez propercję build w pliku intlayer.config.ts.
Skopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.POLISH], defaultLocale: Locales.ENGLISH, }, dictionary: { importMode: "dynamic", }, build: { // Zamienia wywołania useIntlayer() na bezpośrednie importy ze słowników podczas budowania. // undefined = auto (włączone w produkcji), true = zawsze, false = nigdy. optimize: undefined, // Zmienia długie nazwy kluczy dla pól we wkompilowanych słownikach na ich krótkie, // jednoznakowe wersje alfabetyczne (np. title → a). Zmniejsza rozmiar pliku JSON; wymaga optymalizacji. minify: true, // Usuwa pola treści, do których kod źródłowy nie uzyskał w ogóle bezpośredniego dostępu. // Wymaga zdefiniowania optimize w pliku konfiguracyjnym. purge: true, },};export default config;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
// Przed użyciem Minifikacji{ "title": "Witaj", "subtitle": "Świecie" }// Po zastosowaniu Minifikacji{ "a": "Witaj", "b": "Świecie" }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
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { build: { minify: true, },};export default config;Krok dla minifikacji musi zostać oddalony w odstawkę, gdy Twoja opcja tooptimizelub jeżeli udostępniasz systemowoeditor.enabledi ustawiasz na domyślnetrue(wymuszone jest, aby pola trzymały na ten czas swe niezmącone relacje, dla potrzeb odpowiedniego renderowania Wizualnego Edytora).
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
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { build: { purge: true, },};export default config;Przykład: Jeden pospolity słownik wyposażony chociażby o cztery kluczowe pola niepotrzebnego balastu.
Skopiuj kod do schowka
// Przed aktywacją "purge"{ "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }// Po jej zapoczątkowaniu, ostaną się wyłącznie title oraz np. subtitle, połączone więzami skryptu.{ "title": "…", "subtitle": "…" }Mechanizm obalenia Purge opiera się głównie o pominięcia w wypadku kiedy brakujeoptimizeopcjonalnej flagi tudzież podczas zadeklarowania trybu pod system Visual Editor (ustawiająceditor.enabledna rzecz trybutrue).
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
import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = { dictionary: { importMode: "dynamic", // Wybranym trybem domyślnym staje się "static" },};export default config;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
import { type Dictionary, t } from "intlayer";const appContent: Dictionary = { key: "app", importMode: "dynamic", // Tutaj nadpiszemy dominujący import oparty domyślną strukturą. content: { // ... },};export default appContent;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
// Skrypt Przykładowy Twórcyconst content = useIntlayer("my-key");// Tak prezentuje się optymalna struktura oparta pod Tryb (Statyczny)// Skrypt poglądowy odzwierciedla w pełni model bazowy i może wybiegać ze swoich skrajnościconst content = useDictionary({ key: "my-key", content: { nodeType: "translation", translation: { en: "My title", pl: "Mój tytuł", }, },});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
// Przed rozpoczęciem działaniaconst content = useIntlayer("my-key");// Wizualizacja form po obrabianiu ze skryptem docelowym (Pamięciowy tryb dynamiczny)const content = useDictionaryAsync({ en: () => import(".intlayer/dynamic_dictionary/my-key/en.json").then( (mod) => mod.default ), pl: () => import(".intlayer/dynamic_dictionary/my-key/pl.json").then( (mod) => mod.default ),});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
// Początek skryptowania przed zoptymalizowaniemconst content = useIntlayer("my-key");// Powołany wynikowy tryb od zoptymalizowania Fetch'emconst content = useDictionaryAsync({ en: () => fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) => res.json() ), pl: () => fetch("https://intlayer.my-domain.com/dictionary/my-key/pl").then((res) => res.json() ),});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. |