开发者问题收集

导入自定义模块时出现“无法读取未定义的属性‘ɵmod’”

2022-02-17
1981

我已构建并发布了自定义组件库,保存在 Artifactory 中,可以安装到我的应用中吗?安装库后,应用加载时出现以下错误。就像什么都没有呈现一样,只有这个错误消息......

core.js:1139 Uncaught TypeError: Cannot read properties of undefined (reading 'ɵmod') at getNgModuleDef (core.js:1139) at recurse (core.js:25270) at recurse (core.js:25281) at registerNgModuleType (core.js:25266) at new NgModuleFactory$1 (core.js:25380) at compileNgModuleFactory__POST_R3__ (core.js:28993) at PlatformRef.bootstrapModule (core.js:29239) at Module.zUnb (main.ts:11) at webpack_require (bootstrap:79) at Object.0 (main.js:11)

我已经看到 stackoverflow 声明通过添加“返回模块”......但我不知道它需要添加到哪个文件。

{ path: 'auth', loadChildren: () => import('./auth/auth.module') .then((a) => { return a.AuthModule; }); },

并且我已经确认在构建库时打包了正确的文件夹,如 stackoverflow

此外,这是我的导入语句,我觉得它是错误的。但是如果我使用“@myOrg_amf/amf-library”,就会出现编译错误

import { AmfLibraryModule, MaterialModule } from '@myOrg_amf/amf-library/projects/amf-library/src/public-api';

感谢您就此提供的任何建议。

1个回答

我遇到了同样的错误,并且尝试了上述解决方案(我稍微简化了语法,但只需检查如果在 then() 块中使用花括号,是否实际返回了模块:

{ path: 'auth', loadChildren: () => import('./auth/auth.module').then((a) => a.AuthModule) },

对于那些不知道如何放置它的人,它应该放在 app.routing.module.ts 文件中,或者您设置路由的任何位置:

const routes: Routes = [
  ...
  { path: 'auth', loadChildren: () => import('./auth/auth.module').then((a) => a.AuthModule) },
  ...
];


@NgModule({
   imports: [RouterModule.forRoot(routes)],
   exports: [RouterModule]
})
export class AppRoutingModule { }

这样,只有当匹配的路由处于活动状态时,才会加载模块。 有关更多信息,请参阅 https://angular.io/guide/lazy-loading-ngmodules

无论如何,就我而言,我总是遇到相同的错误,唯一的区别是现在当我在该路线上导航时它会出现,而不是在应用程序启动时显示,这意味着当 angular 尝试加载模块时会抛出该错误。

我尝试直接在导入网址中指向模块(而不是此处显示的 public-api),但这并没有解决问题。

可能我在我的库中做了一些奇怪的事情 :/ 希望这至少对第一个疑问有所帮助

更新: 我从 projects/my-project 文件夹(其中包含 src 等)调用 npm publish ,而应该从 dist/my-project 调用。现在错误消失了。

gmasala
2022-08-01