Angular8导入NguCarousel模块报ngModuleType.ngModuleDef未定义问题
报错根因
你遇到的ngModuleType.ngModuleDef为undefined报错是版本不兼容导致的,具体原因如下:
@ngu/carousel@1.5.5是基于Angular 9+的Ivy编译器构建的产物,而你的项目使用的是Angular 8,默认采用旧版View Engine编译器。Ivy编译生成的模块特有的ngModuleDef属性在View Engine环境下无法识别,就会抛出undefined错误。- 你的项目开启了SSR服务端渲染,部分版本的NguCarousel本身不兼容服务端渲染环境,也可能加剧该报错。
解决步骤
替换为适配Angular 8的NguCarousel版本
首先卸载当前版本:npm uninstall @ngu/carousel
安装适配Angular 8的1.4.1版本:npm install @ngu/carousel@1.4.1 --save清理缓存并重启服务
删除项目根目录下的node_modules文件夹和package-lock.json(yarn环境对应删除yarn.lock),重新执行安装命令:npm install
安装完成后重启开发服务即可:npm run startSSR兼容处理(可选,仅开启SSR时需要)
如果修改版本后仍然报错,可在导入模块时添加环境判断,避免服务端渲染时加载该模块,修改app.module.ts中的导入逻辑即可:
@NgModule({ // 其他配置保持不变 imports: [ BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }), // 仅在浏览器环境下导入NguCarouselModule typeof window !== 'undefined' ? NguCarouselModule : [], BrowserAnimationsModule, AccountModule, AccountRoutingModule, RouterModule.forRoot([ { path: 'unauthorized', component: UnauthorizedComponent }, { path: '**', redirectTo: '' } ]) ] })
补充说明:你当前贴出的app.module.ts代码中缺少RouterModule和UnauthorizedComponent的导入语句,记得补全避免其他报错。
内容的提问来源于stack exchange,提问作者roonz11
相关产品推荐
相关产品推荐

