@intlayer/docs 9.2.0 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/blog/ar/index.md +1 -1
  2. package/blog/de/index.md +1 -1
  3. package/blog/en/index.md +1 -1
  4. package/blog/en-GB/index.md +1 -1
  5. package/blog/es/index.md +1 -1
  6. package/blog/fr/index.md +1 -1
  7. package/blog/hi/index.md +1 -1
  8. package/blog/id/index.md +1 -1
  9. package/blog/it/index.md +1 -1
  10. package/blog/ja/index.md +1 -1
  11. package/blog/ko/index.md +1 -1
  12. package/blog/pl/index.md +1 -1
  13. package/blog/pt/index.md +1 -1
  14. package/blog/ru/index.md +1 -1
  15. package/blog/uk/index.md +1 -1
  16. package/blog/vi/index.md +1 -1
  17. package/blog/zh/index.md +1 -1
  18. package/dist/cjs/common.cjs +24 -1
  19. package/dist/cjs/common.cjs.map +1 -1
  20. package/dist/cjs/generated/blog.entry.cjs +31 -4
  21. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  22. package/dist/cjs/generated/docs.entry.cjs +31 -4
  23. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  24. package/dist/cjs/generated/frequentQuestions.entry.cjs +31 -4
  25. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  26. package/dist/cjs/generated/legal.entry.cjs +31 -4
  27. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  28. package/dist/esm/common.mjs +24 -1
  29. package/dist/esm/common.mjs.map +1 -1
  30. package/dist/esm/generated/blog.entry.mjs +31 -4
  31. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  32. package/dist/esm/generated/docs.entry.mjs +31 -4
  33. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  34. package/dist/esm/generated/frequentQuestions.entry.mjs +31 -4
  35. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  36. package/dist/esm/generated/legal.entry.mjs +31 -4
  37. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  38. package/dist/types/common.d.ts.map +1 -1
  39. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  40. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  41. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  42. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  43. package/docs/ar/bundle_optimization.md +58 -25
  44. package/docs/ar/live-sync.md +4 -0
  45. package/docs/bn/bundle_optimization.md +58 -25
  46. package/docs/cs/bundle_optimization.md +58 -25
  47. package/docs/de/bundle_optimization.md +58 -25
  48. package/docs/de/live-sync.md +4 -0
  49. package/docs/en/bundle_optimization.md +51 -23
  50. package/docs/en/live-sync.md +4 -0
  51. package/docs/en-GB/bundle_optimization.md +58 -25
  52. package/docs/en-GB/live-sync.md +4 -0
  53. package/docs/es/bundle_optimization.md +58 -25
  54. package/docs/es/live-sync.md +4 -0
  55. package/docs/fr/bundle_optimization.md +58 -25
  56. package/docs/fr/live-sync.md +4 -0
  57. package/docs/hi/bundle_optimization.md +58 -25
  58. package/docs/hi/live-sync.md +4 -0
  59. package/docs/id/bundle_optimization.md +58 -25
  60. package/docs/id/live-sync.md +4 -0
  61. package/docs/it/bundle_optimization.md +58 -25
  62. package/docs/it/live-sync.md +4 -0
  63. package/docs/ja/bundle_optimization.md +58 -25
  64. package/docs/ja/live-sync.md +4 -0
  65. package/docs/ko/bundle_optimization.md +58 -25
  66. package/docs/ko/live-sync.md +4 -0
  67. package/docs/nl/bundle_optimization.md +58 -25
  68. package/docs/pl/bundle_optimization.md +58 -25
  69. package/docs/pl/live-sync.md +4 -0
  70. package/docs/pt/bundle_optimization.md +58 -24
  71. package/docs/pt/live-sync.md +4 -0
  72. package/docs/ru/bundle_optimization.md +58 -25
  73. package/docs/ru/live-sync.md +4 -0
  74. package/docs/tr/bundle_optimization.md +58 -25
  75. package/docs/tr/live-sync.md +4 -0
  76. package/docs/uk/bundle_optimization.md +58 -25
  77. package/docs/uk/live-sync.md +4 -0
  78. package/docs/ur/bundle_optimization.md +58 -25
  79. package/docs/vi/bundle_optimization.md +58 -25
  80. package/docs/vi/live-sync.md +4 -0
  81. package/docs/zh/bundle_optimization.md +58 -25
  82. package/docs/zh/live-sync.md +4 -0
  83. package/docs/zh-TW/bundle_optimization.md +58 -25
  84. package/package.json +7 -7
  85. package/src/common.ts +39 -2
  86. package/src/generated/blog.entry.ts +39 -7
  87. package/src/generated/docs.entry.ts +39 -7
  88. package/src/generated/frequentQuestions.entry.ts +39 -7
  89. package/src/generated/legal.entry.ts +39 -7
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: Оптимизация размера сборки (bundle) i18n и производительности
5
5
  description: Уменьшите размер сборки вашего приложения за счет оптимизации контента интернационализации (i18n). Узнайте, как использовать tree shaking и ленивую загрузку (lazy loading) для словарей с помощью Intlayer.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` и `minify` теперь работают в Next.js через `@intlayer/swc` — файл `babel.config.js` не требуется"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "Перечисление плагинов Babel в требуемом порядке конвейера (extract → purge → minify → optimize) в справочных таблицах"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Добавлены `intlayerPurgeBabelPlugin` и `intlayerMinifyBabelPlugin` для Babel/Webpack; уточнен процесс работы плагинов (pipeline)"
@@ -191,12 +197,14 @@ Intlayer использует **компонентный подход**. В от
191
197
 
192
198
  Они используются непосредственно в `babel.config.js` для сборок на базе Webpack (Next.js с Babel, CRA, пользовательский Webpack и т.д.).
193
199
 
200
+ В таблице ниже они перечислены в требуемом порядке конвейера (в том же порядке, в котором они должны идти в `babel.config.js`):
201
+
194
202
  | Плагин | Что делает |
195
203
  | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Сканирует `.content.ts` файлы и записывает скомпилированные словари в `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Переписывает `useIntlayer('key')` → `useDictionary(hash)` и внедряет (import) соответствующий словарь |
198
205
  | `intlayerPurgeBabelPlugin` | Сканирует все исходные файлы, удаляет **неиспользуемые поля контента** из скомпилированных `.intlayer/**/*.json` файлов словарей |
199
206
  | `intlayerMinifyBabelPlugin` | **Переименовывает ключи полей контента** в короткие буквенные алиасы (например, `title` → `a`) как в JSON-файлах, так и в исходном коде |
207
+ | `intlayerOptimizeBabelPlugin` | Переписывает `useIntlayer('key')` → `useDictionary(hash)` и внедряет (import) соответствующий словарь |
200
208
 
201
209
  > **Порядок плагинов имеет значение.** В вашем `babel.config.js` плагины purge и minify должны быть указаны **до** плагина optimize. Оптимизация (optimize) заменяет `useIntlayer('key')` непрозрачным вызовом `useDictionary(hash)`, стирая информацию о ключе словаря, которая нужна плагинам purge и minify для определения того, какие поля используются.
202
210
 
@@ -205,9 +213,9 @@ Intlayer использует **компонентный подход**. В от
205
213
  | Помощник параметров | Используется вместе с |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Плагины Vite (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Intlayer использует **компонентный подход**. В от
220
228
  | Dictionary minify | То же самое, что и запись JSON плагином `intlayerMinifyBabelPlugin` |
221
229
  | Babel transform | То же самое, что и переименование исходного кода `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Плагин SWC (`@intlayer/swc`)
232
+
233
+ Пользователи Next.js **тоже никогда не настраивают это напрямую**. Начиная с **v9.2.1**, `withIntlayer()` в `next.config.ts` выполняет весь конвейер — purge, минификацию и переписывание импортов — опираясь только на флаги `build.purge` и `build.minify`.
234
+
235
+ Работа разделена на две части, поскольку Wasm-плагин SWC преобразует по одному файлу за раз и не имеет доступа к файловой системе:
236
+
237
+ | Проход | Где выполняется | Что делает |
238
+ | :---------------------------------------------------- | :---------------------------- | :----------------------------------------------------------------------------------------------------------- |
239
+ | Анализ использования + purge/минификация JSON | Node, внутри `withIntlayer()` | Читает каждый исходный файл компонента, переписывает `.intlayer/**/*.json`, формирует таблицы переименования |
240
+ | Переписывание исходного кода (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Применяет таблицы переименования к соответствующим обращениям к свойствам в вашем коде |
241
+ | Переписывание импортов (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | То же, что `intlayerOptimizeBabelPlugin` |
242
+
243
+ Определение того, _какие_ поля не используются и _какой_ псевдоним получит каждое из них, требует состояния между файлами и файлового ввода-вывода, поэтому эта половина выполняется в Node; плагин SWC получает лишь готовые таблицы.
244
+
223
245
  ## Настройка по платформам
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Intlayer использует **компонентный подход**. В от
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js требует использования плагина `@intlayer/swc` для оптимизации (перезаписи импортов), так как Next.js использует SWC при сборке.
252
+ Next.js требует плагин `@intlayer/swc`, поскольку Next.js использует SWC для сборки. Начиная с **v9.2.1** этот единственный пакет покрывает весь конвейер — оптимизацию (переписывание импортов), purge и минификацию.
231
253
 
232
254
  > Этот плагин не устанавливается по умолчанию, поскольку плагины SWC всё еще находятся на стадии эксперимента для Next.js. Это может измениться в будущем.
233
255
 
256
+ > **Next.js 16.1.0 — минимальная версия.** Это первый релиз, построенный на прямо совместимом ABI Wasm-плагинов SWC; более ранние релизы отклоняют плагин. `withIntlayer` считывает вашу версию Next.js и просто не регистрирует плагин ниже 16.1.0 — такие сборки всё равно проходят успешно, просто без оптимизации бандла.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  После установки Intlayer автоматически обнаружит и использует этот плагин.
267
291
 
268
- Для выполнения **удаления (purge) и минификации (minify)** (удаления полей и их переименования), установите `@intlayer/babel` параллельно с вышеуказанным и добавьте плагины Babel. Поскольку Next.js использует SWC для преобразований, но по-прежнему вычисляет (evaluates) `babel.config.js` для конфигурации плагинов, плагины Babel запускаются в качестве предварительного этапа до SWC.
292
+ Проходы **purge и минификации** (удаление и переименование полей) не требуют ни дополнительного пакета, ни `babel.config.js`. Оберните вашу конфигурацию в `withIntlayer` и включите флаги в `intlayer.config.ts`:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* ваша конфигурация */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: удаляет неиспользуемые поля контента из .intlayer/**/*.json
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: переименовывает ключи полей контента в JSON + в исходном коде
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Примечание: intlayerOptimizeBabelPlugin ЗДЕСЬ НЕ НУЖЕН, потому что
290
- // @intlayer/swc самостоятельно обрабатывает переписывание useIntlayer → useDictionary.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // удаляет неиспользуемые поля контента из собранного JSON
309
+ minify: true, // переименовывает ключи полей контента в короткие псевдонимы
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ Во время `next build` `withIntlayer` анализирует ваши исходники, переписывает скомпилированные словари и передаёт полученные таблицы переименования полей в `@intlayer/swc`, который обновляет соответствующие обращения к свойствам в вашем коде.
317
+
318
+ > Используйте асинхронный `withIntlayer`, а не `withIntlayerSync`. Синхронный вариант не запускает конвейер анализа, поэтому purge и минификация с ним не действуют.
319
+
320
+ > Purge и минификация выполняются только при `next build` — конвейер оптимизации отключён во время `next dev`.
321
+
322
+ > Они также отключаются, когда настроены вызывающие из адаптеров совместимости (`swcExtraCallers`, задаваемые пакетами совместимости, такими как `@intlayer/next-intl` или `@intlayer/react-i18next`): эти места вызова невидимы для анализатора использования, поэтому purge удалил бы поля, которые код всё ещё читает. Переписывание импортов остаётся активным.
323
+
324
+ **Более ранние версии (до 9.2.1)** требовали `@intlayer/babel` и файл `babel.config.js`, объявляющий `intlayerPurgeBabelPlugin` и `intlayerMinifyBabelPlugin`. Этот файл больше не нужен и может быть удалён.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > Процесс минификации пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true` (визуальный редактор требует сохранения оригинальных имен полей для возможности редактирования).
449
480
 
481
+ > В Next.js минификация также пропускается, когда `@intlayer/swc` не установлен или не может быть загружен (Next.js ниже 16.1.0). Плагин — это та половина, которая переписывает обращения в исходном коде, поэтому переименование словарей без него оставило бы ваш код читающим имена полей, которых больше нет.
482
+
450
483
  > Минификация также пропускается для словарей, загружаемых через `importMode: 'fetch'`, поскольку их JSON выдается удаленным API с оригинальными именами полей — изменение ключей на клиентской стороне нарушит контракт сервер/клиент.
451
484
 
452
485
  ### Удаление неиспользуемых полей (Purging)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > Процесс очистки пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true`.
511
+ > Процесс очистки пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true`. В Next.js он дополнительно пропускается, когда `@intlayer/swc` недоступен и когда настроены вызывающие из адаптеров совместимости.
479
512
 
480
513
  > Очистка также отменяется из соображений надежности, когда исходный файл не удается разобрать (парсинг), или если результат работы `useIntlayer` присваивается переменной и передается способами, которые статический анализатор не может проконтролировать (например, spreading объекта, передача через prop без деструктуризации). В этих случаях сохраняется весь словарь целиком.
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: i18n Paket Boyutu ve Performans Optimizasyonu
5
5
  description: Uluslararasılaştırma (i18n) içeriğini optimize ederek uygulama paket boyutunuzu küçültün. Intlayer ile sözlükler için tree shaking ve lazy loading'i nasıl kullanacağınızı öğrenin.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` ve `minify` artık `@intlayer/swc` aracılığıyla Next.js'te çalışıyor — `babel.config.js` gerekmiyor"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "Babel eklentilerini referans tablolarında gerekli pipeline sırasına göre listeleme (extract → purge → minify → optimize)"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Babel/Webpack için `intlayerPurgeBabelPlugin` ve `intlayerMinifyBabelPlugin` eklendi; eklenti (plugin) süreci netleştirildi"
@@ -191,12 +197,14 @@ Intlayer'ın derleme optimizasyonu, her birinin tek bir sorumluluğu olduğu bir
191
197
 
192
198
  Bunlar doğrudan Webpack tabanlı yapılandırmalarda (Babel ile kullanılan Next.js, CRA, özel Webpack vb.) `babel.config.js` içinde kullanılır.
193
199
 
200
+ Aşağıdaki tablo bunları gerekli pipeline sırasına göre listeler (`babel.config.js` içinde görünmeleri gereken sırayla aynı):
201
+
194
202
  | Eklenti | Ne yapar |
195
203
  | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | `.content.ts` dosyalarını tarayarak derlenmiş sözlükleri `.intlayer/` altına yazar |
197
- | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` çağrısını `useDictionary(hash)` olarak yeniden yazar ve ilgili sözlük için eşleşen bir `import` ifadesi enjekte eder |
198
205
  | `intlayerPurgeBabelPlugin` | Tüm kaynak dosyaları tarar, derlenmiş `.intlayer/**/*.json` sözlük dosyalarından **kullanılmayan içerik alanlarını** temizler |
199
206
  | `intlayerMinifyBabelPlugin` | JSON dosyalarındaki ve kaynak koddaki **içerik alanı anahtarlarını kısa alfabetik isimlere (alias)** (`title` → `a`) dönüştürür |
207
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` çağrısını `useDictionary(hash)` olarak yeniden yazar ve ilgili sözlük için eşleşen bir `import` ifadesi enjekte eder |
200
208
 
201
209
  > **Eklenti sırası önemlidir.** `babel.config.js` dosyanızda purge ve minify eklentileri optimize eklentisinden **önce** gelmelidir. Optimize aşaması `useIntlayer('key')` öğesini belirsiz bir `useDictionary(hash)` çağrısı ile değiştirdiğinden, purge ve minify işlemlerinin hangi alanların kullanıldığını tespit edebilmesi için gerekli olan sözlük anahtar bilgisi kaybolur.
202
210
 
@@ -205,9 +213,9 @@ Her Babel eklentisi, yapılandırma yüklenme zamanında `intlayer.config.ts`'yi
205
213
  | Opsiyon yardımcısı | Birlikte kullanıldığı eklenti |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Vite eklentileri (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Vite kullanıcıları **bunları asla doğrudan yapılandırmaz**. Bunlar `vite.
220
228
  | Dictionary minify | `intlayerMinifyBabelPlugin` JSON yazma adımı ile aynı |
221
229
  | Babel transform | `intlayerMinifyBabelPlugin` kaynak kod yeniden adlandırması + `intlayerOptimizeBabelPlugin` aynı |
222
230
 
231
+ ### SWC eklentisi (`@intlayer/swc`)
232
+
233
+ Next.js kullanıcıları da **bunları asla doğrudan yapılandırmaz**. **v9.2.1**'den itibaren `next.config.ts` içindeki `withIntlayer()`, yalnızca `build.purge` ve `build.minify` bayraklarına dayanarak tüm pipeline'ı — purge, minify ve import yeniden yazımını — çalıştırır.
234
+
235
+ İş ikiye bölünmüştür, çünkü bir SWC Wasm eklentisi her seferinde tek bir dosyayı dönüştürür ve dosya sistemine erişimi yoktur:
236
+
237
+ | Geçiş | Nerede çalışır | Ne yapar |
238
+ | :-------------------------------------------------- | :---------------------------- | :------------------------------------------------------------------------------------------------------------------------ |
239
+ | Kullanım analizi + JSON purge/minify | Node, `withIntlayer()` içinde | Her bileşen kaynak dosyasını okur, `.intlayer/**/*.json` dosyalarını yeniden yazar, yeniden adlandırma tablolarını üretir |
240
+ | Kaynak kodu yeniden yazımı (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Yeniden adlandırma tablolarını kodunuzdaki eşleşen özellik erişimlerine uygular |
241
+ | Import yeniden yazımı (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | `intlayerOptimizeBabelPlugin` ile aynı |
242
+
243
+ _Hangi_ alanların kullanılmadığına ve her birinin _hangi_ takma adı alacağına karar vermek dosyalar arası durum ve dosya G/Ç gerektirir; bu nedenle bu yarısı Node'da çalışır ve SWC eklentisi yalnızca ortaya çıkan tabloları alır.
244
+
223
245
  ## Platforma Göre Kurulum
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Vite kullanıcıları **bunları asla doğrudan yapılandırmaz**. Bunlar `vite.
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js, derleme işlemleri için SWC kullandığından, optimize adımı (import yeniden yazma) için `@intlayer/swc` eklentisine ihtiyaç duyar.
252
+ Next.js, derlemeler için SWC kullandığından `@intlayer/swc` eklentisini gerektirir. **v9.2.1**'den itibaren bu tek paket tüm pipeline'ı kapsar — optimize (import yeniden yazımı), purge ve minify.
231
253
 
232
254
  > Bu eklenti varsayılan olarak yüklenmez çünkü SWC eklentileri Next.js için hala deneysel aşamadadır. İlerleyen zamanlarda bu durum değişebilir.
233
255
 
256
+ > **Next.js 16.1.0 minimum sürümdür.** SWC'nin ileriye dönük uyumlu Wasm eklenti ABI'si üzerine kurulan ilk sürümdür; daha eski sürümler eklentiyi reddeder. `withIntlayer` projenizin Next.js sürümünü okur ve 16.1.0'ın altında eklentiyi hiç kaydetmez — bu derlemeler yine de başarılı olur, sadece paket optimizasyonu olmadan çalışır.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  Yüklendikten sonra Intlayer eklentiyi otomatik olarak algılar ve kullanır.
267
291
 
268
- **Purge ve minify** adımları için (alan kaldırma ve alan yeniden adlandırma), bununla birlikte `@intlayer/babel` paketini de kurun ve Babel eklentilerini ekleyin. Next.js dönüşüm için SWC'yi kullansa da, eklenti yapılandırması için hala `babel.config.js` dosyasını kontrol ettiği için Babel eklentileri SWC'den önceki bir adım olarak çalışır.
292
+ **Purge ve minify** geçişleri (alan kaldırma ve alan yeniden adlandırma) ek bir paket veya `babel.config.js` gerektirmez. Yapılandırmanızı `withIntlayer` ile sarın ve bayrakları `intlayer.config.ts` içinde açın:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* yapılandırmanız */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: kullanılmayan içerik alanlarını .intlayer/**/*.json'dan siler
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: JSON + kaynak kodunda içerik alanı anahtarlarını yeniden adlandırır
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Not: intlayerOptimizeBabelPlugin burada GEREKLİ DEĞİLDİR çünkü
290
- // @intlayer/swc paketi useIntlayer → useDictionary değişikliğini halleder.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // paketlenen JSON'dan kullanılmayan içerik alanlarını kaldırır
309
+ minify: true, // içerik alanı anahtarlarını kısa takma adlara dönüştürür
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ `next build` sırasında `withIntlayer` kaynaklarınızı analiz eder, derlenmiş sözlükleri yeniden yazar ve elde edilen alan yeniden adlandırma tablolarını `@intlayer/swc` eklentisine iletir; eklenti de kodunuzdaki eşleşen özellik erişimlerini günceller.
317
+
318
+ > `withIntlayerSync` yerine asenkron `withIntlayer` kullanın. Senkron sürüm analiz pipeline'ını çalıştırmaz, bu nedenle purge ve minify onunla hiçbir etki yaratmaz.
319
+
320
+ > Purge ve minify yalnızca `next build` sırasında çalışır — optimize pipeline'ı `next dev` sırasında kapalıdır.
321
+
322
+ > Uyumluluk adaptörü çağıranları yapılandırıldığında da devre dışı kalırlar (`swcExtraCallers`; `@intlayer/next-intl` veya `@intlayer/react-i18next` gibi uyumluluk paketleri tarafından ayarlanır): bu çağrı noktaları kullanım analizörüne görünmez, dolayısıyla purge kodun hâlâ okuduğu alanları kaldırırdı. Import yeniden yazımı etkin kalır.
323
+
324
+ **Daha eski sürümler (9.2.1 öncesi)** `@intlayer/babel` paketini ve `intlayerPurgeBabelPlugin` ile `intlayerMinifyBabelPlugin` tanımlayan bir `babel.config.js` dosyasını gerektiriyordu. Bu dosya artık gerekli değildir ve silinebilir.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > `optimize` seçeneği `false` olduğunda veya `editor.enabled` `true` olduğunda minification atlanır (görsel düzenleyicinin düzenlemeye olanak tanıması için orijinal alan isimlerine ihtiyacı vardır).
449
480
 
481
+ > Next.js'te minifikasyon, `@intlayer/swc` kurulu değilse veya yüklenemiyorsa (16.1.0 altındaki Next.js) da atlanır. Eklenti, kaynak kodundaki erişimleri yeniden yazan yarıdır; onsuz sözlükleri yeniden adlandırmak kodunuzun artık var olmayan alan adlarını okumasına yol açardı.
482
+
450
483
  > Ayrıca, JSON'ların orijinal isimleriyle uzak (remote) API'den getirildiği durumlarda, yani sözlüklerin `importMode: 'fetch'` ile yüklendiği durumlarda da atlanır — istemci tarafındaki (client-side) isimleri değiştirmek sunucu/istemci sözleşmesini bozacaktır.
451
484
 
452
485
  ### Purging (kullanılmayan alanların silinmesi)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > `optimize` `false` olduğunda veya `editor.enabled` `true` olduğunda Purge işlemi atlanır.
511
+ > `optimize` `false` olduğunda veya `editor.enabled` `true` olduğunda Purge işlemi atlanır. Next.js'te ayrıca `@intlayer/swc` kullanılamadığında ve uyumluluk adaptörü çağıranları yapılandırıldığında atlanır.
479
512
 
480
513
  > Ayrıca, bir kaynak dosyasının ayrıştırılamadığı veya `useIntlayer` sonucunun bir değişkene atanıp (örneğin objeye yayılması, parçalama (destructuring) yapılmadan bir prop olarak iletilmesi gibi) statik analiz aracının takip edemeyeceği yollarla gönderildiği durumlarda Purge işlemi tedbir amaçlı olarak atlanır. Bu durumlarda tüm sözlük bozulmadan korunur.
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: Оптимізація розміру бандлу та продуктивності i18n
5
5
  description: Зменште розмір бандлу вашого застосунку завдяки оптимізації контенту інтернаціоналізації (i18n). Дізнайтеся, як використовувати tree shaking та ліниве завантаження (lazy loading) для словників за допомогою Intlayer.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` та `minify` тепер працюють у Next.js через `@intlayer/swc` — файл `babel.config.js` не потрібен"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "Перелік плагінів Babel у потрібному порядку конвеєра (extract → purge → minify → optimize) у довідкових таблицях"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Додано `intlayerPurgeBabelPlugin` та `intlayerMinifyBabelPlugin` для Babel/Webpack; уточнено порядок конвеєра плагінів"
@@ -191,12 +197,14 @@ Intlayer використовує **підхід на рівні компоне
191
197
 
192
198
  Ці плагіни використовуються безпосередньо в `babel.config.js` для налаштувань на базі Webpack (Next.js із Babel, CRA, кастомний Webpack тощо).
193
199
 
200
+ Таблиця нижче перелічує їх у потрібному порядку конвеєра (у тому самому порядку, в якому вони мають бути в `babel.config.js`):
201
+
194
202
  | Плагін | Що він робить |
195
203
  | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Сканує файли `.content.ts` та записує зібрані словники до папки `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Переписує `useIntlayer('key')` на `useDictionary(hash)` та інжектить (вставляє) відповідний `import` словника |
198
205
  | `intlayerPurgeBabelPlugin` | Сканує всі файли з кодом та видаляє **невикористані поля контенту** зі скомпільованих словників `.intlayer/**/*.json` |
199
206
  | `intlayerMinifyBabelPlugin` | **Перейменовує ключі полів контенту** на короткі алфавітні псевдоніми (наприклад, `title` → `a`) у JSON-файлах та у вихідному коді |
207
+ | `intlayerOptimizeBabelPlugin` | Переписує `useIntlayer('key')` на `useDictionary(hash)` та інжектить (вставляє) відповідний `import` словника |
200
208
 
201
209
  > **Порядок плагінів має значення.** У файлі `babel.config.js` плагіни `purge` та `minify` мають з'являтися **перед** плагіном `optimize`. Оскільки `optimize` замінює `useIntlayer('key')` на непрозорий (opaque) виклик `useDictionary(hash)`, він стирає інформацію про ключ словника. Але саме ця інформація потрібна на етапах `purge` та `minify`, щоб розпізнати, які поля контенту використовуються.
202
210
 
@@ -205,9 +213,9 @@ Intlayer використовує **підхід на рівні компоне
205
213
  | Options helper | З яким плагіном використовується |
206
214
  | :--------------------------- | :------------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Плагіни Vite (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Intlayer використовує **підхід на рівні компоне
220
228
  | Dictionary minify | Аналогічно до етапу запису JSON плагіна `intlayerMinifyBabelPlugin` |
221
229
  | Babel transform | Аналогічно до перейменування у вихідному коді плагіном `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Плагін SWC (`@intlayer/swc`)
232
+
233
+ Користувачі Next.js **також ніколи не налаштовують це напряму**. Починаючи з **v9.2.1**, `withIntlayer()` у `next.config.ts` виконує весь конвеєр — purge, мініфікацію та переписування імпортів — спираючись лише на прапорці `build.purge` і `build.minify`.
234
+
235
+ Роботу поділено на дві частини, бо Wasm-плагін SWC перетворює по одному файлу за раз і не має доступу до файлової системи:
236
+
237
+ | Прохід | Де виконується | Що робить |
238
+ | :---------------------------------------------------- | :------------------------------- | :--------------------------------------------------------------------------------------------------- |
239
+ | Аналіз використання + purge/мініфікація JSON | Node, усередині `withIntlayer()` | Читає кожен вихідний файл компонента, переписує `.intlayer/**/*.json`, формує таблиці перейменування |
240
+ | Переписування вихідного коду (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Застосовує таблиці перейменування до відповідних звернень до властивостей у вашому коді |
241
+ | Переписування імпортів (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Те саме, що `intlayerOptimizeBabelPlugin` |
242
+
243
+ Визначення того, _які_ поля не використовуються і _який_ псевдонім отримає кожне з них, потребує стану між файлами та файлового вводу-виводу, тож ця половина виконується в Node; плагін SWC отримує лише готові таблиці.
244
+
223
245
  ## Налаштування за платформами
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Intlayer використовує **підхід на рівні компоне
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js потребує плагіна `@intlayer/swc` для етапу оптимізації (перезапису імпорту), оскільки Next.js використовує SWC для збірки.
252
+ Next.js потребує плагіна `@intlayer/swc`, оскільки Next.js використовує SWC для збірок. Починаючи з **v9.2.1** цей єдиний пакет охоплює весь конвеєр — оптимізацію (переписування імпортів), purge та мініфікацію.
231
253
 
232
254
  > Цей плагін не встановлюється автоматично, адже плагіни SWC для Next.js ще мають експериментальний статус. У майбутньому це може змінитися.
233
255
 
256
+ > **Next.js 16.1.0 — мінімальна версія.** Це перший реліз, побудований на прямо сумісному ABI Wasm-плагінів SWC; більш ранні релізи відхиляють плагін. `withIntlayer` зчитує вашу версію Next.js і просто не реєструє плагін нижче 16.1.0 — такі збірки все одно проходять успішно, просто без оптимізації бандла.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  Після встановлення Intlayer автоматично виявить і почне використовувати цей плагін.
267
291
 
268
- Для етапів **purge та minify** (видалення та перейменування полів) вам треба встановити поруч `@intlayer/babel` і додати Babel-плагіни. Оскільки Next.js хоча й застосовує SWC для трансформацій, але продовжує зчитувати `babel.config.js` під час збирання налаштувань плагінів, Babel-плагіни запускатимуться як пре-пас (попередня обробка) перед SWC.
292
+ Проходи **purge та мініфікації** (видалення й перейменування полів) не потребують ані додаткового пакета, ані `babel.config.js`. Оберніть свою конфігурацію в `withIntlayer` і увімкніть прапорці в `intlayer.config.ts`:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* ваша конфігурація */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: видалити невикористані поля контенту з .intlayer/**/*.json
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: перейменувати ключі полів контенту в JSON-файлах та вихідному коді
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // Примітка: intlayerOptimizeBabelPlugin тут НЕ потрібен, тому що
290
- // @intlayer/swc вже відповідає за переписування useIntlayer → useDictionary.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // видаляє невикористані поля контенту зі зібраного JSON
309
+ minify: true, // перейменовує ключі полів контенту на короткі псевдоніми
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ Під час `next build` `withIntlayer` аналізує ваші джерела, переписує скомпільовані словники та передає отримані таблиці перейменування полів до `@intlayer/swc`, який оновлює відповідні звернення до властивостей у вашому коді.
317
+
318
+ > Використовуйте асинхронний `withIntlayer`, а не `withIntlayerSync`. Синхронний варіант не запускає конвеєр аналізу, тож purge і мініфікація з ним не діють.
319
+
320
+ > Purge і мініфікація виконуються лише під час `next build` — конвеєр оптимізації вимкнено під час `next dev`.
321
+
322
+ > Вони також вимикаються, коли налаштовано викликачів з адаптерів сумісності (`swcExtraCallers`, які задають пакети сумісності, як-от `@intlayer/next-intl` чи `@intlayer/react-i18next`): ці місця виклику невидимі для аналізатора використання, тож purge видалив би поля, які код усе ще читає. Переписування імпортів залишається активним.
323
+
324
+ **Раніші версії (до 9.2.1)** потребували `@intlayer/babel` і файл `babel.config.js`, що оголошує `intlayerPurgeBabelPlugin` та `intlayerMinifyBabelPlugin`. Цей файл більше не потрібен і його можна видалити.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > Мініфікація пропускається (skipped), коли `optimize` становить `false`, або коли `editor.enabled` становить `true` (візуальний редактор потребує оригінальних імен полів для їх редагування).
449
480
 
481
+ > У Next.js мініфікація також пропускається, коли `@intlayer/swc` не встановлено або його неможливо завантажити (Next.js нижче 16.1.0). Плагін — це та половина, що переписує звернення у вихідному коді, тож перейменування словників без нього залишило б ваш код таким, що читає імена полів, яких більше немає.
482
+
450
483
  > Мініфікація також пропускається для словників, що завантажуються з `importMode: 'fetch'`, оскільки їхні JSON-дані постачаються з віддаленого API з оригінальними іменами полів — перейменування ключів на боці клієнта порушить зв'язок сервер/клієнт.
451
484
 
452
485
  ### Очищення (видалення невикористаних полів)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > Очищення пропускається, коли `optimize` становить `false`, або коли `editor.enabled` становить `true`.
511
+ > Очищення пропускається, коли `optimize` становить `false`, або коли `editor.enabled` становить `true`. У Next.js його додатково пропускають, коли `@intlayer/swc` недоступний і коли налаштовано викликачів з адаптерів сумісності.
479
512
 
480
513
  > Очищення також консервативно пропускається, коли вихідний файл не може бути розпарсений, або коли результат виклику `useIntlayer` присвоюється змінній і далі передається способами, які статичний аналізатор не може відстежити (наприклад, поширюється у вигляді spread-об'єкта чи передається як prop без деструктуризації). В таких випадках весь словник зберігається повністю.
481
514
 
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08