带firebase云函数的Angular 6 Universal
我是firebase云函数angular universal的新手带firebase云函数的Angular 6 Universal,angular,firebase,google-cloud-functions,server-side-rendering,angular-universal,Angular,Firebase,Google Cloud Functions,Server Side Rendering,Angular Universal,我是firebase云函数angular universal的新手 ERROR { Error: Uncaught (in promise): TypeError: Cannot read property 'ngInjectableDef' of undefined TypeError: Cannot read property 'ngInjectableDef' of undefined at resolveNgModuleDep (/user_code/node_modules/@
ERROR { Error: Uncaught (in promise): TypeError: Cannot read property 'ngInjectableDef' of undefined
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9)
at resolvePromise (/user_code/node_modules/zone.js/dist/zone-node.js:814:31)
at resolvePromise (/user_code/node_modules/zone.js/dist/zone-node.js:771:17)
at /user_code/node_modules/zone.js/dist/zone-node.js:873:17
at ZoneDelegate.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:421:31)
at Object.onInvokeTask (/user_code/node_modules/@angular/core/bundles/core.umd.js:3804:37)
at ZoneDelegate.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:420:36)
at Zone.runTask (/user_code/node_modules/zone.js/dist/zone-node.js:188:47)
at drainMicroTaskQueue (/user_code/node_modules/zone.js/dist/zone-node.js:595:35)
at ZoneTask.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:500:21)
at ZoneTask.invoke (/user_code/node_modules/zone.js/dist/zone-node.js:485:48)
rejection:
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9),
promise:
ZoneAwarePromise {
__zone_symbol__state: 0,
__zone_symbol__value:
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9) },
zone:
Zone {
_properties: { isAngularZone: true },
_parent:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
_name: 'angular',
_zoneDelegate:
ZoneDelegate {
_taskCounts: [Object],
zone: [Circular],
_parentDelegate: [Object],
_forkZS: null,
_forkDlgt: null,
_forkCurrZone: [Object],
_interceptZS: null,
_interceptDlgt: null,
_interceptCurrZone: [Object],
_invokeZS: [Object],
_invokeDlgt: [Object],
_invokeCurrZone: [Circular],
_handleErrorZS: [Object],
_handleErrorDlgt: [Object],
_handleErrorCurrZone: [Circular],
_scheduleTaskZS: [Object],
_scheduleTaskDlgt: [Object],
_scheduleTaskCurrZone: [Circular],
_invokeTaskZS: [Object],
_invoke
我尝试过使用云函数进行angular universal并部署到firebase。一切(Node.js服务器、firebase服务)都正常工作,但当我将(托管和功能)部署到firebase时,我在firebase云函数中遇到了这个错误
ERROR { Error: Uncaught (in promise): TypeError: Cannot read property 'ngInjectableDef' of undefined
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9)
at resolvePromise (/user_code/node_modules/zone.js/dist/zone-node.js:814:31)
at resolvePromise (/user_code/node_modules/zone.js/dist/zone-node.js:771:17)
at /user_code/node_modules/zone.js/dist/zone-node.js:873:17
at ZoneDelegate.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:421:31)
at Object.onInvokeTask (/user_code/node_modules/@angular/core/bundles/core.umd.js:3804:37)
at ZoneDelegate.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:420:36)
at Zone.runTask (/user_code/node_modules/zone.js/dist/zone-node.js:188:47)
at drainMicroTaskQueue (/user_code/node_modules/zone.js/dist/zone-node.js:595:35)
at ZoneTask.invokeTask (/user_code/node_modules/zone.js/dist/zone-node.js:500:21)
at ZoneTask.invoke (/user_code/node_modules/zone.js/dist/zone-node.js:485:48)
rejection:
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9),
promise:
ZoneAwarePromise {
__zone_symbol__state: 0,
__zone_symbol__value:
TypeError: Cannot read property 'ngInjectableDef' of undefined
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8160:34)
at _createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:8229:36)
at _createProviderInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8193:30)
at resolveNgModuleDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:8156:25)
at NgModuleRef_.get (/user_code/node_modules/@angular/core/bundles/core.umd.js:8864:20)
at resolveDep (/user_code/node_modules/@angular/core/bundles/core.umd.js:9229:49)
at createClass (/user_code/node_modules/@angular/core/bundles/core.umd.js:9109:36)
at createDirectiveInstance (/user_code/node_modules/@angular/core/bundles/core.umd.js:8986:24)
at createViewNodes (/user_code/node_modules/@angular/core/bundles/core.umd.js:10206:40)
at createRootView (/user_code/node_modules/@angular/core/bundles/core.umd.js:10120:9) },
zone:
Zone {
_properties: { isAngularZone: true },
_parent:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
_name: 'angular',
_zoneDelegate:
ZoneDelegate {
_taskCounts: [Object],
zone: [Circular],
_parentDelegate: [Object],
_forkZS: null,
_forkDlgt: null,
_forkCurrZone: [Object],
_interceptZS: null,
_interceptDlgt: null,
_interceptCurrZone: [Object],
_invokeZS: [Object],
_invokeDlgt: [Object],
_invokeCurrZone: [Circular],
_handleErrorZS: [Object],
_handleErrorDlgt: [Object],
_handleErrorCurrZone: [Circular],
_scheduleTaskZS: [Object],
_scheduleTaskDlgt: [Object],
_scheduleTaskCurrZone: [Circular],
_invokeTaskZS: [Object],
_invoke
server.ts
// These are important and needed before anything else
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
// DOM libs required for Firebase
(global as any).WebSocket = require('ws');
(global as any).XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
import { enableProdMode } from '@angular/core';
import * as express from 'express';
import { ngExpressEngine } from '@nguniversal/express-engine';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import { join } from 'path';
const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist');
const APP_NAME = 'browser';
const {
AppServerModuleNgFactory,
LAZY_MODULE_MAP
} = require(`./dist/server/main`);
enableProdMode();
const app = express();
// Set the engine
app.engine(
'html',
ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [provideModuleMap(LAZY_MODULE_MAP)]
})
);
app.set('view engine', 'html');
app.get('/**/*', (req, res) => {
res.render(join(DIST_FOLDER, APP_NAME, 'index'), {
req,
res
});
});
app.set('view engine', 'html');
app.set('views', join(DIST_FOLDER, APP_NAME));
// Static Assets
app.get('*.*', express.static(join(DIST_FOLDER, APP_NAME)));
// Point all routes to Universal
app.get('*', (req, res) => {
res.render('index', { req });
});
// Start Express Server
app.listen(PORT, () => {
console.log(`Node Express server listening on http://localhost:${PORT}`);
});
webpack.prerender.config.js
const path = require('path');
const webpack = require('webpack');
const APP_NAME = 'browser';
module.exports = {
entry: { prerender: './server.ts' },
resolve: { extensions: ['.js', '.ts'] },
mode: 'development',
target: 'node',
externals: [/(node_modules|main\..*\.js)/],
output: {
path: path.join(__dirname, `dist/${APP_NAME}`),
filename: '[name].js'
},
module: {
rules: [
{ test: /\.ts$/, loader: 'ts-loader' }
]
},
plugins: [
new webpack.ContextReplacementPlugin(
/(.+)?angular(\\|\/)core(.+)?/,
path.join(__dirname, 'src'), // location of your src
{} // a map of your routes
),
new webpack.ContextReplacementPlugin(
/(.+)?express(\\|\/)(.+)?/,
path.join(__dirname, 'src'),
{}
)
]
}
这是functions/index.js
require('zone.js/dist/zone-node');
const functions = require('firebase-functions');
const express = require('express');
const path = require('path');
const { enableProdMode } = require('@angular/core');
const { renderModuleFactory } = require('@angular/platform-server');
const { provideModuleMap } = require('@nguniversal/module-map-ngfactory-loader');
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main');
enableProdMode();
const index = require('fs')
.readFileSync(path.resolve(__dirname, './dist/browser/index.html'), 'utf8')
.toString();
let app = express();
app.get('**', function(req, res) {
renderModuleFactory(AppServerModuleNgFactory, {
url: req.path,
document: index,
extraProviders: [
provideModuleMap(LAZY_MODULE_MAP)
]
}).then(html => res.status(200).send(html));
});
exports.universal = functions.https.onRequest(app);
功能和托管是两种截然不同的firebase功能。你的问题是什么:函数不起作用,或者你的项目没有部署?我已经部署到firebase,但函数不起作用,并出现错误“无法读取undefined的属性'ngInjectableDef'。此错误发生在开发模式下,它肯定不会在你网站的控制台中弹出(或者你做了一些非常错误的事情)。所以,如果您在开发模式中有这个错误,您是如何构建应用程序来部署它的?我在开发模式中没有这个错误。我的应用程序可以正确运行,但当我构建应用程序时,我收到了4条警告(例如,./node_modules/ws/lib/buffer-util.js Module not found:Error:无法解析'bufferutil')。我不知道这些警告是否与云函数中的错误有关。那么您在哪里可以看到这个错误呢?