Раньше я запускал ng build
для создания сборки моего приложения Angular 18. Он всегда работал нормально, создавая файл index.html
. Однако сегодня вместо этого внезапно начал генерироваться файл index.csr.html
, и я не могу понять, почему.
Я использую хостинг Firebase и действие GitHub для автоматического развертывания сборки. Поскольку он не генерирует index.html
, развертывание завершается неудачей. Все шло нормально до вчерашнего дня.
Чтобы обойти эту проблему, мне приходится вручную переименовывать index.csr.html
в index.html
, и тогда развертывание работает нормально.
Ниже приведен вывод команды ng build
.
Application bundle generation complete. [15.184 seconds]
▲ [WARNING] Module 'undici' used by 'node_modules/@firebase/auth-compat/dist/esm/index.node.esm.js' is not ESM
CommonJS or AMD dependencies can cause optimization bailouts.
For more information see: https://angular.dev/tools/cli/build#configuring-commonjs-dependencies
▲ [WARNING] Module 'undici' used by 'node_modules/@firebase/auth/dist/node-esm/internal.js' is not ESM
CommonJS or AMD dependencies can cause optimization bailouts.
For more information see: https://angular.dev/tools/cli/build#configuring-commonjs-dependencies
▲ [WARNING] Module 'faye-websocket' used by 'node_modules/@firebase/database/dist/node-esm/index.node.esm.js' is not ESM
CommonJS or AMD dependencies can cause optimization bailouts.
For more information see: https://angular.dev/tools/cli/build#configuring-commonjs-dependencies
После включения SSR, index.html
содержит предварительно обработанную страницу. Кроме того, генерируется index.csr.html
, который включает только скрипты и стили без какого-либо предварительно обработанного контента. Используете ли вы пререндеринг/SSR в своем проекте?
Я только что проверил, у меня CSR включен, но он всегда был включен, ничего конкретного не изменилось. Я сделал только одно — создал сборку --prod, и это могло стать поворотным моментом. Но как мне это исправить?
Сформируйте исходный код CLI :
/**
* If SSR is activated, create a distinct entry file for the `index.html`.
* This is necessary because numerous server/cloud providers automatically serve the `index.html` as a static file
* if it exists (handling SSG).
* For instance, accessing `foo.com/` would lead to `foo.com/index.html` being served instead of hitting the server.
*/
const indexBaseName = path.basename(options.index);
indexOutput = ssrOptions && indexBaseName === 'index.html' ? 'index.csr.html' : indexBaseName;
index.csr.html
создается, когда у вас включен SSR, но он по-прежнему дает возможность использовать так называемый «Рендеринг на стороне клиента», который представляет собой обычное SPA-приложение.
Итак, как мне сказать, чтобы он генерировал index.html, а не index.csr.html?
Я столкнулся с аналогичной проблемой. Я понял, что для создания простого Index.html нужно отключить SSR. Я изменил два поля в angular.json
` "prerender": false,
"ssr": false`
Отключите SSR, как предложил Андрей Павлов, если вы его не используете, или вручную переименуйте index.csr.html в index.html.
csr
— известный термин в angular и означает «рендеринг на стороне клиента». Во-первых, это вам не поможет, но: есть ли что-то в конфигурации, которую вы изменили? Какие-нибудь обновления npm или что-то в этом роде?