带firebase云函数的Angular 6 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/@

我是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/@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')。我不知道这些警告是否与云函数中的错误有关。那么您在哪里可以看到这个错误呢?