为什么我会得到
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/