Angular 通用 Firebase : no provider for InjectionToken MODULE_MAP

标签 angular firebase google-cloud-functions angular-universal

为什么我会得到

Error: StaticInjectorError(AppServerModule)[NgModuleFactoryLoader -> InjectionToken MODULE_MAP]: 

  StaticInjectorError(Platform: core)[NgModuleFactoryLoader -> InjectionToken MODULE_MAP]: 

    NullInjectorError: No provider for InjectionToken MODULE_MAP!

尝试使用 Firebase 部署时?

我确实使用
extraProviders: [

  provideModuleMap(LAZY_MODULE_MAP)

]

并在我的 app-server.module 中导入 ModuleMapLoaderModule (顺便说一句,我尝试以不同的顺序导入 ServerModule 和 AppModule,有人告诉我这可能是问题所在,但它没有用):
@NgModule({

  imports: [

    ServerModule,

    AppModule,

    ModuleMapLoaderModule,

  ],

  bootstrap: [AppComponent],

})

export class AppServerModule { }

main.bundle.js 包含以下内容:
Object.defineProperty(exports, "__esModule", { value: true });

var app_server_module_ngfactory_1 = __webpack_require__("./src/app/app.server.module.ngfactory.js");

exports.AppServerModuleNgFactory = app_server_module_ngfactory_1.AppServerModuleNgFactory;

var __lazy_0__ = __webpack_require__("./src/app/features/blog/blog.module.ngfactory.js");

var app_server_module_1 = __webpack_require__("./src/app/app.server.module.ts");

exports.AppServerModule = app_server_module_1.AppServerModule;

exports.LAZY_MODULE_MAP = { "app/features/blog/blog.module#BlogModule": __lazy_0__.BlogModuleNgFactory };
main.bundle.js确实会正确导入到 firebase 脚本中,因为如果我更改 require(...) 中的一些字母,我收到文件未知的错误。那么 LAZY_MODULE_MAP 有什么问题? ?它看起来像一个 string-route-to-factory map/js-object 并被导出。那为什么 provideModuleMap 没有解决它正确吗? BlogModule只有一个 Hello-World-Stub 组件的声明。

顺便说一句,这里有一个类似的问题,但没有回复:Angular5 Universal lazy loading on firebase hosting and seo

最佳答案

TLDR;

npm uninstall @nguniversal/common
npm uninstall @nguniversal/module-map-ngfactory-loader

并删除 ModuleMapLoaderModule来自您的app.server.module.ts .

TSWM;

在 Angular < 9 中,Universal 依赖于 @nguniversal/common@nguniversal/module-map-ngfactory-loader处理延迟加载的模块。使用 Angular 9+,他们现在提供开箱即用的 ngExpressEngine处理这个。您只需要@nguniversal/express-engine作为 the docs提到。

关于Angular 通用 Firebase : no provider for InjectionToken MODULE_MAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431575/

相关文章:

javascript - Firestore云功能。https.onRequest Request.url.split ("/")不起作用

java - 如何在节点 Firebase 中获得唯一的随机产品?

python - 如何在 Python 中迭代 GCP 项目中的所有 DataProc 集群?

python - 如何在 Google Cloud Functions 中正确使用 Python 3 导入

angular - 找不到模块 '@angular/core/src/metadata/lifecycle_hooks' - primeng/table/table.d.ts

angular - 如何匹配 Angular2 中内存中 web api 中传递的确切 url 参数?

javascript - RXJS retryWhen 重置等待间隔

带有 AOT 的 Angular 多入口点

Angular/Firebase 身份验证 - 使 bool 值从服务到组件可观察?

node.js - FireBase 错误解析错误 : Unexpected token return