@intlayer/docs 7.5.12 → 7.5.13
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.
- package/blog/uk/compiler_vs_declarative_i18n.md +224 -0
- package/blog/uk/i18n_using_next-i18next.md +1086 -0
- package/blog/uk/i18n_using_next-intl.md +760 -0
- package/blog/uk/index.md +69 -0
- package/blog/uk/internationalization_and_SEO.md +273 -0
- package/blog/uk/intlayer_with_i18next.md +211 -0
- package/blog/uk/intlayer_with_next-i18next.md +202 -0
- package/blog/uk/intlayer_with_next-intl.md +203 -0
- package/blog/uk/intlayer_with_react-i18next.md +200 -0
- package/blog/uk/intlayer_with_react-intl.md +202 -0
- package/blog/uk/intlayer_with_vue-i18n.md +206 -0
- package/blog/uk/l10n_platform_alternative/Lokalise.md +80 -0
- package/blog/uk/l10n_platform_alternative/crowdin.md +80 -0
- package/blog/uk/l10n_platform_alternative/phrase.md +78 -0
- package/blog/uk/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/uk/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/uk/list_i18n_technologies/CMS/wordpress.md +189 -0
- package/blog/uk/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/uk/list_i18n_technologies/frameworks/flutter.md +128 -0
- package/blog/uk/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/uk/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/uk/list_i18n_technologies/frameworks/svelte.md +145 -0
- package/blog/uk/list_i18n_technologies/frameworks/vue.md +144 -0
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1499 -0
- package/blog/uk/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/uk/rag_powered_documentation_assistant.md +288 -0
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/uk/vue-i18n_vs_intlayer.md +279 -0
- package/blog/uk/what_is_internationalization.md +167 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/docs/ar/configuration.md +6 -1
- package/docs/ar/dictionary/content_file.md +6 -1
- package/docs/de/configuration.md +6 -1
- package/docs/de/dictionary/content_file.md +6 -1
- package/docs/en/configuration.md +6 -1
- package/docs/en/dictionary/content_file.md +6 -1
- package/docs/en-GB/configuration.md +6 -1
- package/docs/en-GB/dictionary/content_file.md +3 -1
- package/docs/es/configuration.md +6 -1
- package/docs/es/dictionary/content_file.md +6 -1
- package/docs/fr/configuration.md +6 -1
- package/docs/fr/dictionary/content_file.md +3 -1
- package/docs/hi/configuration.md +6 -1
- package/docs/hi/dictionary/content_file.md +3 -1
- package/docs/id/configuration.md +6 -1
- package/docs/id/dictionary/content_file.md +3 -1
- package/docs/it/configuration.md +6 -1
- package/docs/it/dictionary/content_file.md +3 -1
- package/docs/ja/configuration.md +6 -1
- package/docs/ja/dictionary/content_file.md +3 -1
- package/docs/ko/configuration.md +6 -1
- package/docs/ko/dictionary/content_file.md +3 -1
- package/docs/pl/configuration.md +3 -1
- package/docs/pl/dictionary/content_file.md +3 -1
- package/docs/pt/configuration.md +6 -1
- package/docs/pt/dictionary/content_file.md +3 -1
- package/docs/ru/configuration.md +6 -1
- package/docs/ru/dictionary/content_file.md +6 -1
- package/docs/tr/configuration.md +6 -1
- package/docs/tr/dictionary/content_file.md +3 -1
- package/docs/uk/CI_CD.md +198 -0
- package/docs/uk/autoFill.md +307 -0
- package/docs/uk/bundle_optimization.md +185 -0
- package/docs/uk/cli/build.md +64 -0
- package/docs/uk/cli/ci.md +137 -0
- package/docs/uk/cli/configuration.md +63 -0
- package/docs/uk/cli/debug.md +46 -0
- package/docs/uk/cli/doc-review.md +43 -0
- package/docs/uk/cli/doc-translate.md +132 -0
- package/docs/uk/cli/editor.md +28 -0
- package/docs/uk/cli/fill.md +130 -0
- package/docs/uk/cli/index.md +190 -0
- package/docs/uk/cli/init.md +84 -0
- package/docs/uk/cli/list.md +90 -0
- package/docs/uk/cli/list_projects.md +128 -0
- package/docs/uk/cli/live.md +41 -0
- package/docs/uk/cli/login.md +157 -0
- package/docs/uk/cli/pull.md +78 -0
- package/docs/uk/cli/push.md +98 -0
- package/docs/uk/cli/sdk.md +71 -0
- package/docs/uk/cli/test.md +76 -0
- package/docs/uk/cli/transform.md +65 -0
- package/docs/uk/cli/version.md +24 -0
- package/docs/uk/cli/watch.md +37 -0
- package/docs/uk/configuration.md +742 -0
- package/docs/uk/dictionary/condition.md +237 -0
- package/docs/uk/dictionary/content_file.md +1134 -0
- package/docs/uk/dictionary/enumeration.md +245 -0
- package/docs/uk/dictionary/file.md +232 -0
- package/docs/uk/dictionary/function_fetching.md +212 -0
- package/docs/uk/dictionary/gender.md +273 -0
- package/docs/uk/dictionary/insertion.md +187 -0
- package/docs/uk/dictionary/markdown.md +383 -0
- package/docs/uk/dictionary/nesting.md +273 -0
- package/docs/uk/dictionary/translation.md +332 -0
- package/docs/uk/formatters.md +595 -0
- package/docs/uk/how_works_intlayer.md +256 -0
- package/docs/uk/index.md +175 -0
- package/docs/uk/interest_of_intlayer.md +297 -0
- package/docs/uk/intlayer_CMS.md +569 -0
- package/docs/uk/intlayer_visual_editor.md +292 -0
- package/docs/uk/intlayer_with_angular.md +710 -0
- package/docs/uk/intlayer_with_astro.md +256 -0
- package/docs/uk/intlayer_with_create_react_app.md +1258 -0
- package/docs/uk/intlayer_with_express.md +429 -0
- package/docs/uk/intlayer_with_fastify.md +446 -0
- package/docs/uk/intlayer_with_lynx+react.md +548 -0
- package/docs/uk/intlayer_with_nestjs.md +283 -0
- package/docs/uk/intlayer_with_next-i18next.md +640 -0
- package/docs/uk/intlayer_with_next-intl.md +456 -0
- package/docs/uk/intlayer_with_nextjs_page_router.md +1541 -0
- package/docs/uk/intlayer_with_nuxt.md +711 -0
- package/docs/uk/intlayer_with_react_router_v7.md +600 -0
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +669 -0
- package/docs/uk/intlayer_with_svelte_kit.md +579 -0
- package/docs/uk/intlayer_with_tanstack.md +818 -0
- package/docs/uk/intlayer_with_vite+preact.md +1748 -0
- package/docs/uk/intlayer_with_vite+react.md +1449 -0
- package/docs/uk/intlayer_with_vite+solid.md +302 -0
- package/docs/uk/intlayer_with_vite+svelte.md +520 -0
- package/docs/uk/intlayer_with_vite+vue.md +1113 -0
- package/docs/uk/introduction.md +222 -0
- package/docs/uk/locale_mapper.md +242 -0
- package/docs/uk/mcp_server.md +211 -0
- package/docs/uk/packages/express-intlayer/t.md +465 -0
- package/docs/uk/packages/intlayer/getEnumeration.md +159 -0
- package/docs/uk/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/uk/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/uk/packages/intlayer/getLocaleName.md +135 -0
- package/docs/uk/packages/intlayer/getLocalizedUrl.md +338 -0
- package/docs/uk/packages/intlayer/getMultilingualUrls.md +359 -0
- package/docs/uk/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/uk/packages/intlayer/getPrefix.md +213 -0
- package/docs/uk/packages/intlayer/getTranslation.md +190 -0
- package/docs/uk/packages/intlayer/getTranslationContent.md +189 -0
- package/docs/uk/packages/next-intlayer/t.md +365 -0
- package/docs/uk/packages/next-intlayer/useDictionary.md +276 -0
- package/docs/uk/packages/next-intlayer/useIntlayer.md +263 -0
- package/docs/uk/packages/next-intlayer/useLocale.md +166 -0
- package/docs/uk/packages/react-intlayer/t.md +311 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +295 -0
- package/docs/uk/packages/react-intlayer/useI18n.md +250 -0
- package/docs/uk/packages/react-intlayer/useIntlayer.md +251 -0
- package/docs/uk/packages/react-intlayer/useLocale.md +210 -0
- package/docs/uk/per_locale_file.md +345 -0
- package/docs/uk/plugins/sync-json.md +398 -0
- package/docs/uk/readme.md +265 -0
- package/docs/uk/releases/v6.md +305 -0
- package/docs/uk/releases/v7.md +624 -0
- package/docs/uk/roadmap.md +346 -0
- package/docs/uk/testing.md +204 -0
- package/docs/vi/configuration.md +6 -1
- package/docs/vi/dictionary/content_file.md +6 -1
- package/docs/zh/configuration.md +6 -1
- package/docs/zh/dictionary/content_file.md +6 -1
- package/frequent_questions/ar/error-vite-env-only.md +77 -0
- package/frequent_questions/de/error-vite-env-only.md +77 -0
- package/frequent_questions/en/error-vite-env-only.md +77 -0
- package/frequent_questions/en-GB/error-vite-env-only.md +77 -0
- package/frequent_questions/es/error-vite-env-only.md +76 -0
- package/frequent_questions/fr/error-vite-env-only.md +77 -0
- package/frequent_questions/hi/error-vite-env-only.md +77 -0
- package/frequent_questions/id/error-vite-env-only.md +77 -0
- package/frequent_questions/it/error-vite-env-only.md +77 -0
- package/frequent_questions/ja/error-vite-env-only.md +77 -0
- package/frequent_questions/ko/error-vite-env-only.md +77 -0
- package/frequent_questions/pl/error-vite-env-only.md +77 -0
- package/frequent_questions/pt/error-vite-env-only.md +77 -0
- package/frequent_questions/ru/error-vite-env-only.md +77 -0
- package/frequent_questions/tr/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/uk/array_as_content_declaration.md +72 -0
- package/frequent_questions/uk/build_dictionaries.md +58 -0
- package/frequent_questions/uk/build_error_CI_CD.md +74 -0
- package/frequent_questions/uk/bun_set_up.md +53 -0
- package/frequent_questions/uk/customized_locale_list.md +64 -0
- package/frequent_questions/uk/domain_routing.md +113 -0
- package/frequent_questions/uk/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/esbuild_error.md +29 -0
- package/frequent_questions/uk/get_locale_cookie.md +142 -0
- package/frequent_questions/uk/intlayer_command_undefined.md +155 -0
- package/frequent_questions/uk/locale_incorect_in_url.md +73 -0
- package/frequent_questions/uk/package_version_error.md +181 -0
- package/frequent_questions/uk/static_rendering.md +44 -0
- package/frequent_questions/uk/translated_path_url.md +55 -0
- package/frequent_questions/uk/unknown_command.md +97 -0
- package/frequent_questions/vi/error-vite-env-only.md +77 -0
- package/frequent_questions/zh/error-vite-env-only.md +77 -0
- package/legal/uk/privacy_notice.md +83 -0
- package/legal/uk/terms_of_service.md +55 -0
- package/package.json +6 -6
- package/src/generated/frequentQuestions.entry.ts +20 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Команда intlayer не визначена
|
|
5
|
+
description: Дізнайтеся, як виправити помилку «команда intlayer не визначена».
|
|
6
|
+
keywords:
|
|
7
|
+
- intlayer
|
|
8
|
+
- command
|
|
9
|
+
- undefined
|
|
10
|
+
- error
|
|
11
|
+
- vscode
|
|
12
|
+
- extension
|
|
13
|
+
- plugin
|
|
14
|
+
- framework
|
|
15
|
+
- next.js
|
|
16
|
+
- vite
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- intlayer-command-undefined
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Команда intlayer не визначена
|
|
23
|
+
|
|
24
|
+
## Огляд
|
|
25
|
+
|
|
26
|
+
Intlayer CLI надає зручний спосіб керування вашим вмістом intlayer, включно зі збіркою словників, відправкою перекладів та іншим. Однак він не є обов'язковим для роботи вашого проєкту. Якщо ви використовуєте bundler-плагін (наприклад, `withIntlayer()` для Next.js або `intlayer()` для Vite), Intlayer автоматично збирає словники під час збірки додатку або запуску dev-сервера. У режимі розробки він також відслідковує зміни та автоматично перебудовує файли декларацій вмісту.
|
|
27
|
+
|
|
28
|
+
Ви можете отримати доступ до команд intlayer різними способами:
|
|
29
|
+
|
|
30
|
+
- Використовуючи CLI-команду `intlayer` безпосередньо
|
|
31
|
+
- Використовуючи [розширення VSCode](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/vs_code_extension.md)
|
|
32
|
+
- Використовуючи SDK `@intlayer/cli`
|
|
33
|
+
|
|
34
|
+
## Проблема
|
|
35
|
+
|
|
36
|
+
Коли ви намагаєтеся використати команду `intlayer`, ви можете зіткнутися з цією помилкою:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
'intlayer' is not recognized as an internal or external command,
|
|
40
|
+
operable program or batch file.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Рішення
|
|
44
|
+
|
|
45
|
+
Спробуйте ці рішення в порядку:
|
|
46
|
+
|
|
47
|
+
1. **Перевірте, що команда встановлена**
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx intlayer -h
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Очікуваний вивід:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
Usage: intlayer [options] [command]
|
|
57
|
+
|
|
58
|
+
Intlayer CLI
|
|
59
|
+
|
|
60
|
+
Options:
|
|
61
|
+
-V, --version output the version number
|
|
62
|
+
-h, --help display help for command
|
|
63
|
+
|
|
64
|
+
Commands:
|
|
65
|
+
dictionary|dictionaries Dictionaries operations
|
|
66
|
+
configuration|config Configuration operations
|
|
67
|
+
help [command] display help for command
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. **Встановіть пакет intlayer-cli глобально**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install intlayer-cli -g -g
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
> Це не має бути необхідним, якщо ви вже встановили пакет `intlayer`
|
|
77
|
+
|
|
78
|
+
3. **Встановіть пакет глобально**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm install intlayer -g
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
4. **Перезапустіть термінал**
|
|
85
|
+
Іноді потрібно перезапустити термінал, щоб він розпізнав нові команди.
|
|
86
|
+
|
|
87
|
+
5. **Очистіть і перевстановіть**
|
|
88
|
+
Якщо наведені вище рішення не допомогли:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
rm -rf node_modules package-lock.json
|
|
92
|
+
npm install
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
6. **Перевірте файли встановлення**
|
|
96
|
+
Якщо проблема зберігається, перевірте, що існують такі файли:
|
|
97
|
+
- `node_modules/intlayer/dist/cjs/cli.cjs`
|
|
98
|
+
- `node_modules/intlayer/package.json` (має містити поле `bin`, що посилається на `./dist/cjs/cli.cjs`)
|
|
99
|
+
|
|
100
|
+
7. **Перевірте змінну середовища PATH**
|
|
101
|
+
Переконайтеся, що директорія глобальних bin-файлів npm присутня у вашому PATH:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Для Unix-подібних систем (macOS/Linux)
|
|
105
|
+
echo $PATH
|
|
106
|
+
# Має містити щось на кшталт /usr/local/bin або ~/.npm-global/bin
|
|
107
|
+
|
|
108
|
+
# Для Windows
|
|
109
|
+
echo %PATH%
|
|
110
|
+
# Має містити каталог глобальних бінарних файлів npm
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
8. **Use npx with full path**
|
|
114
|
+
If the command is still not found, try using npx with the full path:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npx ./node_modules/intlayer/ dictionaries build
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
9. **Check for conflicting installations**
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Перелічіть усі глобально встановлені пакети
|
|
124
|
+
npm list -g --depth=0
|
|
125
|
+
|
|
126
|
+
# Видаліть будь-які конфліктні глобальні встановлення
|
|
127
|
+
npm uninstall -g intlayer
|
|
128
|
+
npm uninstall -g intlayer-cli
|
|
129
|
+
# Потім перевстановіть
|
|
130
|
+
npm install -g intlayer
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
10. **Verify Node.js and npm versions**
|
|
134
|
+
Make sure you're using compatible versions:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
node --version
|
|
138
|
+
npm --version
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
If you're using an outdated version, consider updating Node.js and npm.
|
|
142
|
+
|
|
143
|
+
11. **Перевірте проблеми з дозволами**
|
|
144
|
+
Якщо ви отримуєте помилки доступу:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Для Unix-подібних систем
|
|
148
|
+
sudo npm install -g intlayer
|
|
149
|
+
|
|
150
|
+
# Або змініть каталог за замовчуванням для npm
|
|
151
|
+
mkdir ~/.npm-global
|
|
152
|
+
npm config set prefix '~/.npm-global'
|
|
153
|
+
# Додайте в ваш ~/.profile або ~/.bashrc:
|
|
154
|
+
export PATH=~/.npm-global/bin:$PATH
|
|
155
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Некоректна локаль, отримана з URL
|
|
5
|
+
description: Дізнайтеся, як виправити некоректну локаль, отриману з URL.
|
|
6
|
+
keywords:
|
|
7
|
+
- локаль
|
|
8
|
+
- url
|
|
9
|
+
- intlayer
|
|
10
|
+
- next.js
|
|
11
|
+
- vite
|
|
12
|
+
- фреймворк
|
|
13
|
+
- middleware
|
|
14
|
+
- конфігурація
|
|
15
|
+
- prefixDefault
|
|
16
|
+
- noPrefix
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- locale-incorect-in-url
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Некоректна локаль, отримана з URL
|
|
23
|
+
|
|
24
|
+
## Опис проблеми
|
|
25
|
+
|
|
26
|
+
Коли ви намагаєтеся отримати параметр locale з URL, ви можете зіткнутися з проблемою, коли значення локалі некоректне:
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const { locale } = await params;
|
|
30
|
+
console.log(locale); // повертає "about" замість очікуваної локалі
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Рішення
|
|
34
|
+
|
|
35
|
+
### 1. Перевірте структуру файлів
|
|
36
|
+
|
|
37
|
+
Переконайтеся, що шлях у app router вашого Next.js відповідає цій структурі:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
src/app/[locale]/about/page.tsx
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Перевірте конфігурацію middleware
|
|
44
|
+
|
|
45
|
+
Проблема часто виникає, коли middleware відсутній або не спрацьовує. Файл middleware має знаходитись за шляхом:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
src/middleware.ts
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Цей middleware відповідає за переписування маршрутів, коли `prefixDefault` встановлено в `false`. Наприклад, він переписує `/en/about` на `/about`.
|
|
52
|
+
|
|
53
|
+
### 3. Шаблони URL залежно від конфігурації
|
|
54
|
+
|
|
55
|
+
#### Конфігурація за замовчуванням (`prefixDefault: false`, `noPrefix: false`)
|
|
56
|
+
|
|
57
|
+
- Англійська: `/about`
|
|
58
|
+
- Французька: `/fr/about`
|
|
59
|
+
- Іспанська: `/es/about`
|
|
60
|
+
|
|
61
|
+
#### Якщо `prefixDefault: true`
|
|
62
|
+
|
|
63
|
+
- Англійська: `/en/about`
|
|
64
|
+
- Французька: `/fr/about`
|
|
65
|
+
- Іспанська: `/es/about`
|
|
66
|
+
|
|
67
|
+
#### Якщо `noPrefix: true`
|
|
68
|
+
|
|
69
|
+
- Англійська: `/about`
|
|
70
|
+
- Французька: `/about`
|
|
71
|
+
- Іспанська: `/about`
|
|
72
|
+
|
|
73
|
+
Для докладнішої інформації про ці параметри конфігурації перегляньте [Документацію з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Отримую помилку, пов'язану з підпакетами `@intlayer/*`
|
|
5
|
+
description: Виправлення помилки, пов'язаної з підпакетами @intlayer/*.
|
|
6
|
+
keywords:
|
|
7
|
+
- @intlayer/*
|
|
8
|
+
- підпакети
|
|
9
|
+
- intlayer
|
|
10
|
+
slugs:
|
|
11
|
+
- frequent-questions
|
|
12
|
+
- package-version-error
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Отримую помилку, пов'язану з підпакетами `@intlayer/*`
|
|
16
|
+
|
|
17
|
+
Ця проблема зазвичай виникає після оновлення пакетів Intlayer.
|
|
18
|
+
|
|
19
|
+
Приклад повідомлення про помилку:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
Error: Cannot find module '@intlayer/types'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
TypeError: (0 , __intlayer_config_client.colorize) is not a function
|
|
27
|
+
|
|
28
|
+
at import { colorize } from '@intlayer/config';
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
✖ ERROR No matching export in "node_modules/@intlayer/config/dist/esm/client.mjs" for import "clearModuleCache"
|
|
33
|
+
|
|
34
|
+
node_modules/@intlayer/unmerged-dictionaries-entry/dist/esm/index.mjs:3:9:
|
|
35
|
+
3 | import { clearModuleCache, configESMxCJSRequire } from "@intlayer/config";
|
|
36
|
+
| ~~~~~~~~~~~~~~~~
|
|
37
|
+
|
|
38
|
+
✖ ERROR No matching export in "node_modules/@intlayer/config/dist/esm/client.mjs" for import "configESMxCJSRequire"
|
|
39
|
+
|
|
40
|
+
node_modules/@intlayer/unmerged-dictionaries-entry/dist/esm/index.mjs:3:27:
|
|
41
|
+
3 | import { clearModuleCache, configESMxCJSRequire } from "@intlayer/config";
|
|
42
|
+
| ~~~~~~~~~~~~~~~~~~~~
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Причина
|
|
46
|
+
|
|
47
|
+
Базові пакети, такі як `intlayer`, `react-intlayer`, `react-native-intlayer`, `vue-intlayer`, повторно використовують ті самі суб-пакети `@intlayer/config`, `@intlayer/core`, `@intlayer/types`, щоб уникнути дублювання коду.
|
|
48
|
+
|
|
49
|
+
Між двома версіями експорти підпакетів не обов'язково збігаються. Щоб зменшити цю проблему, intlayer прив'язує версії підпакетів до версії головного пакета.
|
|
50
|
+
|
|
51
|
+
> Наприклад: `intlayer@1.0.0` використовує `@intlayer/config@1.0.0`, `@intlayer/core@1.0.0`, `@intlayer/types@1.0.0`
|
|
52
|
+
|
|
53
|
+
> (За винятком `@intlayer/swc`), підпакети `@intlayer/*` не призначені для прямого використання. Тому рекомендується не встановлювати їх безпосередньо.
|
|
54
|
+
|
|
55
|
+
## Вирішення
|
|
56
|
+
|
|
57
|
+
1. Переконайтеся, що версії головного пакета та підпакетів однакові.
|
|
58
|
+
|
|
59
|
+
```json5
|
|
60
|
+
{
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"intlayer": "7.0.1",
|
|
63
|
+
"react-intlayer": "7.0.0", // Неправильна версія, має бути 7.0.1
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"intlayer-editor": "7.0.1",
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
2. Спробуйте видалити lockfile та папку node_modules і перевстановити залежності.
|
|
72
|
+
|
|
73
|
+
Інколи пакетний менеджер зберігає стару версію sub-packages у lockfile або в кеші. Щоб виправити це, можна спробувати видалити lockfile та папку node_modules і перевстановити залежності.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
rm -rf package-lock.json node_modules
|
|
77
|
+
|
|
78
|
+
npm install # або yarn install або pnpm install або bun pm install
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
3. Перевірте версії локальних залежностей
|
|
82
|
+
|
|
83
|
+
Може статися, що ваш пакетний менеджер зберігає стару версію sub-packages у lockfile або в кеші.
|
|
84
|
+
|
|
85
|
+
Приклад `intlayer@7.0.0` > `@intlayer/config@7.0.0` > `@intlayer/dictionary-entry@6.0.0`.
|
|
86
|
+
|
|
87
|
+
Щоб виявити невідповідність між версіями локальних залежностей і версіями sub-packages, ви можете використати наступну команду:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm list --depth=3 | grep intlayer
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
yarn list --depth=3 | grep intlayer
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm list --depth=3 | grep intlayer
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
bun pm ls --depth=3 | grep intlayer
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> На Windows замініть `| grep intlayer` на `| findstr intlayer` або використайте PowerShell з `Select-String -Pattern "intlayer"`.
|
|
106
|
+
|
|
107
|
+
4. Перевірте глобальну інсталяцію
|
|
108
|
+
|
|
109
|
+
Ми рекомендуємо встановити `intlayer` або `intlayer-cli` глобально, щоб мати доступ до CLI-команд. Якщо глобальна версія відрізняється від локальної версії, пакетний менеджер може обрати невірну версію.
|
|
110
|
+
|
|
111
|
+
**Перевірити, чи пакет встановлено глобально**
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm list -g --depth=3 | grep intlayer
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
yarn global list --depth=3 | grep intlayer
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
pnpm list -g --depth=3 | grep intlayer
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
bun pm ls -g --depth=3 | grep intlayer
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
> На Windows замініть `| grep intlayer` на `| findstr intlayer` або використовуйте PowerShell з `Select-String -Pattern "intlayer"`.
|
|
130
|
+
|
|
131
|
+
**Виправте потенційні конфлікти глобальних залежностей**
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
npm uninstall -g intlayer intlayer-cli
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
yarn global remove intlayer intlayer-cli
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pnpm remove -g intlayer intlayer-cli
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
bun pm rm -g intlayer intlayer-cli
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
5. Спробуйте очистити кеш
|
|
150
|
+
|
|
151
|
+
У деяких середовищах, таких як Docker, GitHub Actions або хостинг-платформи на зразок Vercel, може бути задіяний кеш. Спробуйте очистити кеш і повторити встановлення.
|
|
152
|
+
|
|
153
|
+
Ви також можете очистити кеш вашого пакетного менеджера за допомогою наступних команд:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
npm cache clean --force
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
yarn cache clean
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
pnpm cache clean
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
bun pm cache clean
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
6. Спробуйте видалити папку `.intlayer`
|
|
172
|
+
|
|
173
|
+
Intlayer кешує зібрану версію самої себе в папці `.intlayer/cache`.
|
|
174
|
+
|
|
175
|
+
Цей кеш може бути пошкоджений, якщо версія intlayer відрізняється від версії, збереженої в кеші.
|
|
176
|
+
|
|
177
|
+
Ви можете спробувати видалити папку `.intlayer` і повторити збірку.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
rm -rf .intlayer
|
|
181
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Статичний vs динамічний рендеринг з i18n у Next.js
|
|
5
|
+
description: Дізнайтеся, як використовувати статичний та динамічний рендеринг з i18n у Next.js.
|
|
6
|
+
keywords:
|
|
7
|
+
- статичний
|
|
8
|
+
- динамічний
|
|
9
|
+
- рендеринг
|
|
10
|
+
- i18n
|
|
11
|
+
- next.js
|
|
12
|
+
- next-intl
|
|
13
|
+
- intlayer
|
|
14
|
+
- фреймворк
|
|
15
|
+
- middleware
|
|
16
|
+
- конфігурація
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- static-rendering
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Статичний vs динамічний рендеринг з i18n у Next.js
|
|
23
|
+
|
|
24
|
+
## Проблема з **next-intl**
|
|
25
|
+
|
|
26
|
+
- **Що відбувається?**
|
|
27
|
+
Коли ви використовуєте `useTranslations`, `getTranslations`, або будь-який хелпер next-intl _всередині Server Component_ в застосунку з i18n-маршрутизацією (`/en/…`, `/fr/…`), Next.js позначає весь маршрут як **dynamic**. ([Next Intl][1])
|
|
28
|
+
|
|
29
|
+
- **Чому?**
|
|
30
|
+
next-intl визначає поточну локаль з заголовка, доступного лише в запиті (`x-next-intl-locale`) через `headers()`. Оскільки `headers()` — це **динамічний API**, будь-який компонент, який до нього звертається, втрачає статичну оптимізацію. ([Next Intl][1], [Next.js][2])
|
|
31
|
+
|
|
32
|
+
- **Офіційне рішення (boilerplate)**
|
|
33
|
+
1. Експортуйте `generateStaticParams` для кожної підтримуваної локалі.
|
|
34
|
+
2. Викликайте `setRequestLocale(locale)` у **кожному** layout/page _перед_ тим, як викликати `useTranslations`. ([Next Intl][1])
|
|
35
|
+
Це усуває залежність від заголовка, але додає додатковий код для підтримки та використовує нестабільний API у продакшені.
|
|
36
|
+
|
|
37
|
+
## Як **intlayer** обходить проблему
|
|
38
|
+
|
|
39
|
+
**Дизайн-рішення**
|
|
40
|
+
|
|
41
|
+
1. **Тільки параметр маршруту (route-param only)** – локаль береться з сегмента URL `[locale]`, який Next.js вже передає кожній сторінці.
|
|
42
|
+
2. **Бандли на етапі компіляції** – Переклади імпортуються як звичайні ES-модулі, тож вони піддаються tree-shaking і вбудовуються під час збірки.
|
|
43
|
+
3. **Без динамічних API** – `useT()` читає з React context, а не з `headers()` або `cookies()`.
|
|
44
|
+
4. **Жодної додаткової конфігурації** – Як тільки ваші сторінки розміщені під `app/[locale]/`, Next.js автоматично генерує по одному HTML‑файлу на кожну локаль.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Чи можна перекласти шлях URL?
|
|
5
|
+
description: Дізнайтеся, як перекласти шлях URL.
|
|
6
|
+
keywords:
|
|
7
|
+
- array
|
|
8
|
+
- content
|
|
9
|
+
- declaration
|
|
10
|
+
- intlayer
|
|
11
|
+
- middleware
|
|
12
|
+
- proxy
|
|
13
|
+
- rewrite
|
|
14
|
+
- prefix
|
|
15
|
+
- locale
|
|
16
|
+
- url
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- translated-path-url
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Чи можливо перекласти URL наступним чином:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
en -> /product (без префікса) або /en/product (з префіксом)
|
|
26
|
+
fr -> /fr/produit
|
|
27
|
+
es -> /es/producto
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
На жаль, Intlayer не дозволяє перекладати URL так, як зазначено вище. Щоб досягти цього, ви повинні використовувати власний middleware або proxy для перезапису (rewrite) URL.
|
|
31
|
+
|
|
32
|
+
Але ви можете використовувати функцію `getMultilingualUrl`, щоб вставити префікс у URL для заданої локалі.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import { getMultilingualUrl, Locales } from "intlayer";
|
|
36
|
+
|
|
37
|
+
const url = getMultilingualUrl("/product");
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* en -> /product (без префікса) або /en/product (з префіксом)
|
|
41
|
+
* fr -> /fr/product
|
|
42
|
+
* es -> /es/product
|
|
43
|
+
*/
|
|
44
|
+
console.log(url);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Або `getLocalizedUrl`
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { getLocalizedUrl, Locales } from "intlayer";
|
|
51
|
+
|
|
52
|
+
const url = getLocalizedUrl("/product", Locales.FRENCH);
|
|
53
|
+
|
|
54
|
+
console.log(url); // виведе: /fr/product
|
|
55
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-05-20
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Невідома команда
|
|
5
|
+
description: Дізнайтеся, як виправити помилку невідомої команди.
|
|
6
|
+
keywords:
|
|
7
|
+
- невідома
|
|
8
|
+
- команда
|
|
9
|
+
- помилка
|
|
10
|
+
- intlayer
|
|
11
|
+
- fill
|
|
12
|
+
- build
|
|
13
|
+
- verbose
|
|
14
|
+
- термінал
|
|
15
|
+
- перезапуск
|
|
16
|
+
- локально
|
|
17
|
+
slugs:
|
|
18
|
+
- frequent-questions
|
|
19
|
+
- unknown-command
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# помилка: невідома команда fill / build / тощо
|
|
23
|
+
|
|
24
|
+
Якщо `npx intlayer fill --verbose` видає:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
error: unknown command 'fill'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
але ви впевнені, що команда `fill` _повинна_ існувати, ось кроки для вирішення:
|
|
31
|
+
|
|
32
|
+
## 1. **Переконайтеся, що ви використовуєте найновішу версію**
|
|
33
|
+
|
|
34
|
+
Запустіть:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx intlayer --version # поточна локальна версія intlayer
|
|
38
|
+
npx intlayer@latest --version # остання доступна версія intlayer
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Це змушує `npx` завантажити найновішу версію. Потім спробуйте ще раз:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx intlayer@latest build --verbose
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 2. **Перевірте, чи команда зареєстрована**
|
|
48
|
+
|
|
49
|
+
Ви можете перевірити за допомогою:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npx intlayer --help # надає інформацію про команди
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Перевірте, чи з'являється команда у списку команд.
|
|
56
|
+
|
|
57
|
+
Перейдіть у репозиторій та підтвердьте, що ваша команда експортується й зареєстрована в точці входу CLI. Intlayer використовує `commander` як фреймворк.
|
|
58
|
+
|
|
59
|
+
Код, що стосується CLI:
|
|
60
|
+
https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/cli/src/cli.ts
|
|
61
|
+
|
|
62
|
+
## 4. **Перезапустіть термінал**
|
|
63
|
+
|
|
64
|
+
Іноді потрібно перезапустити термінал, щоб він розпізнав нові команди.
|
|
65
|
+
|
|
66
|
+
## 5. **Якщо ви розробляєте `intlayer`, перебудуйте та підключіть його**
|
|
67
|
+
|
|
68
|
+
Якщо ви розробляєте `intlayer` локально:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# У директорії intlayer
|
|
72
|
+
npm install
|
|
73
|
+
npm run build
|
|
74
|
+
npm link
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Потім в іншому терміналі:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
intlayer fill --verbose
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Це використовує локальну версію, над якою ви працюєте.
|
|
84
|
+
|
|
85
|
+
## 6. **Очистіть кеш npx (якщо ви застрягли на старішій версії)**
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx clear-npx-cache
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Або вручну видаліть кешовані пакети intlayer:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
rm -rf ~/.npm/_npx
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Перевірте еквівалентні команди, якщо ви використовуєте pnpm, yarn, bun або інший пакетний менеджер
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-01-11
|
|
3
|
+
updatedAt: 2026-01-11
|
|
4
|
+
title: `vite-env-only` & Intlayer – lỗi từ chối `node:fs` dương tính giả
|
|
5
|
+
description: Tại sao vite-env-only báo một import `node:fs` bị từ chối khi dùng Intlayer + React-Router + Vite và phải làm gì.
|
|
6
|
+
keywords:
|
|
7
|
+
- intlayer
|
|
8
|
+
- vite
|
|
9
|
+
- react-router
|
|
10
|
+
- vite-env-only
|
|
11
|
+
- node:fs
|
|
12
|
+
- import bị từ chối
|
|
13
|
+
- alias
|
|
14
|
+
- bundle phía client
|
|
15
|
+
slugs:
|
|
16
|
+
- frequent-questions
|
|
17
|
+
- vite-env-only-node-fs-false-positive
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# vite-env-only từ chối `node:fs` với Intlayer
|
|
21
|
+
|
|
22
|
+
Nếu bạn đã sử dụng plugin **vite-env-only** (như được đề cập trong các gợi ý React-Router v7 cũ hơn) và thấy:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
|
|
26
|
+
Error: [vite-env-only] Import denied
|
|
27
|
+
|
|
28
|
+
* Denied by specifier pattern: /^node:/
|
|
29
|
+
* Importer: index.html
|
|
30
|
+
* Import: "node:fs"
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
…mặc dù **không có `node:fs` trong bundle phía client của bạn**, đây là một **false positive (dương tính giả)**.
|
|
35
|
+
|
|
36
|
+
## Nguyên nhân gây ra
|
|
37
|
+
|
|
38
|
+
`vite-env-only` chạy một kiểm tra dựa trên Babel **rất sớm trong quá trình phân giải graph của Vite**, _trước khi_:
|
|
39
|
+
|
|
40
|
+
- aliasing (bao gồm ánh xạ browser vs node của Intlayer),
|
|
41
|
+
- dead-code elimination,
|
|
42
|
+
- SSR vs client resolution,
|
|
43
|
+
- các module ảo như của React-Router.
|
|
44
|
+
|
|
45
|
+
Các package của Intlayer chứa mã có thể chạy trên cả Node và trình duyệt. Ở một giai đoạn _trung gian_, một builtin của Node như `node:fs` có thể xuất hiện trong graph **trước khi** Vite loại bỏ nó khỏi build phía client. `vite-env-only` nhìn thấy điều đó và báo lỗi ngay lập tức, mặc dù bundle cuối cùng không chứa nó.
|
|
46
|
+
|
|
47
|
+
## React-Router và Server Modules
|
|
48
|
+
|
|
49
|
+
Trong tài liệu của React-Router về **server module conventions**
|
|
50
|
+
(https://reactrouter.com/api/framework-conventions/server-modules), nhóm **rõ ràng khuyến nghị sử dụng `vite-env-only`** để ngăn các import chỉ dành cho server bị rò rỉ vào bundle phía client.
|
|
51
|
+
|
|
52
|
+
Tuy nhiên, những quy ước đó dựa vào aliasing của Vite, conditional exports và tree-shaking để loại bỏ mã chỉ dành cho server. Trong khi aliasing và conditional exports đã được áp dụng, một số tiện ích dựa trên Node vẫn còn xuất hiện trong các package như `@intlayer/core` ở giai đoạn đó (mặc dù chúng không bao giờ được import vào client). Vì tree-shaking chưa chạy, các hàm đó vẫn bị Babel phân tích cú pháp, và `vite-env-only` phát hiện các import `node:` của chúng và báo dương tính giả — mặc dù chúng đã được loại bỏ chính xác khỏi bundle cuối cùng của client.
|
|
53
|
+
|
|
54
|
+
## Cách khắc phục / giải pháp tạm thời
|
|
55
|
+
|
|
56
|
+
### Khuyến nghị: Gỡ bỏ `vite-env-only`
|
|
57
|
+
|
|
58
|
+
Chỉ cần gỡ plugin. Trong nhiều trường hợp bạn không cần nó — Vite đã xử lý việc phân biệt imports client và server thông qua cơ chế resolution của nó.
|
|
59
|
+
|
|
60
|
+
Điều này sửa lỗi báo sai `node:fs` mà không cần thay đổi Intlayer.
|
|
61
|
+
|
|
62
|
+
### Thay vào đó, kiểm tra bản build cuối cùng
|
|
63
|
+
|
|
64
|
+
Nếu bạn vẫn muốn đảm bảo không có built-in của Node trong client, hãy làm điều đó **sau khi build**, ví dụ:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pnpm build
|
|
68
|
+
grep -R "node:" dist/
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Nếu không có kết quả, các bundle client của bạn sạch.
|
|
72
|
+
|
|
73
|
+
## Tóm tắt
|
|
74
|
+
|
|
75
|
+
- `vite-env-only` có thể báo lỗi về `node:fs` vì nó kiểm tra quá sớm.
|
|
76
|
+
- Vite + Intlayer + quy ước server modules của React-Router thường loại bỏ tham chiếu chỉ dành cho server một cách chính xác.
|
|
77
|
+
- Gỡ plugin hoặc kiểm tra _kết quả cuối cùng_ thường là giải pháp tốt nhất.
|