为什么我
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
有什么问题?它看起来像是一个字符串路由到工厂的map / js-object,它会被导出。那么为什么provideModuleMap
无法正确解决? BlogModule
只有Hello-World-Stub组件的声明。
答案 0 :(得分:8)
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所述。
答案 1 :(得分:2)
当我尝试添加module-map-ngfactory-loader以启用延迟加载时,我偶然发现了此错误,但是在新版本的Angular中,您不需要手动添加此模块。
Ivy不支持基于字符串的延迟加载语法,因此不再需要name
。
卸载模块(npm卸载“ package-name”)。并删除ModuleMapLoaderModule对我有用。