Я следовал этому руководству, чтобы развернуть Angular Universal в функции Firebase и развернуть с помощью Firebase: https://medium.com/@chris.duebbert/angular-9-universal-firebase-deploy-8d8d47244e1c
Все работало нормально, пока я не добавил AngularFireModule в свой app.module.ts. Затем, когда я запускаю «ng deploy» с помощью узла 12, я получаю следующую ошибку в журналах моей функции «ssr»:
Предоставленный модуль не может быть загружен. В вашем коде есть синтаксическая ошибка? Подробная трассировка стека: ReferenceError: globalThis не определен
Когда я пытаюсь установить версию своего локального узла на 10, я получаю ту же ошибку прямо в своем терминале.
Судя по всему, Firebase использует globalThis, для которого требуется версия узла 12 (Angular 11 работает на SSR @nguniversal/express-engine ReferenceError: globalThis не определен). Я добавил следующее в свой файл /functions/package.json:
app.module.ts
"engines": {
"node": "12"
},
Я могу указать любое число для версии узла, и моя функция SSR все еще развертывается с узлом 10, и ошибка «globalThis» продолжается. Я использую план Firebase Blaze. Вот мой app.module.ts:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule.withServerTransition({ appId: 'serverApp' }),
AppRoutingModule,
NoopAnimationsModule,
FormsModule,
NgxTwitterTimelineModule,
AngularFireModule.initializeApp(config),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
функции/package.json
{
"name": "functions",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"serve": "npm run build && firebase emulators:start --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "12"
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "^9.4.2",
"firebase-functions": "^3.13.0",
"grpc": "^1.24.4"
},
"devDependencies": {
"tslint": "^5.12.0",
"typescript": "^3.8.0",
"firebase-functions-test": "^0.2.0"
},
"private": true
}
Вам нужно полифиллировать globalThis https://github.com/angular/angularfire#polyfills
Попробуйте заполнить ваш server.ts для SSR.
Вам нужно import 'globalthis/auto';
.
Добавлен импорт 'globalthis/auto'; на самом верху server.ts работал. Спасибо!
импортировать 'globalthis/auto'; наверху server.ts у меня тоже работало. Большое спасибо. Он даже работает для развертывания углового проекта SSR в качестве облачной функции Firebase.
Для других пользователей angular вы можете использовать npm i globalthis
, а затем добавить import 'globalthis/auto';
в конец файла src/polyfill.ts.
Две недели искал решение, пока не нашел этот вопрос/ответ. Спасибо!
Шаги для решения проблемы:
> npm install globalthis
в server.ts
файле:
import 'globalthis/auto';
Я попытался импортировать пакет «globalthis» и добавить импорт «globalthis/polyfill»; и импортировать 'globalthis; в мой файл polyfill.ts, но получил ту же ошибку. Я делаю это неправильно?