导入自定义模块时出现“Cannot read property 'ɵmod' of undefined”的错误。

3
我已经构建并发布了一个自定义组件库,保存在Artifactory中,以便安装到我的应用程序中。但是,在我安装该库后,当应用程序加载时,我遇到了以下错误。就好像没有渲染任何东西,只显示这个错误信息...
核心.js:1139 抛出未捕获的TypeError:无法读取未定义的属性(读取'ɵmod'),在getNgModuleDef(core.js:1139)处,递归(core.js:25270)处,递归(core.js:25281)处,registerNgModuleType(core.js:25266)处,新的NgModuleFactory$1(core.js:25380),compileNgModuleFactory__POST_R3__(core.js:28993),PlatformRef.bootstrapModule(core.js:29239), Module.zUnb(main.ts:11),在webpack_require(bootstrap:79)处,在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';

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


就我所遇到的问题而言,它通常与Angular主要依赖版本问题有关。您编写的导入似乎也是错误的。通常,与库相关的导入最可能类似于import { Something } from "@yourLib/library-selector";。我建议您检查如何构建您的库,我相信问题就在那里。我相信,如果您删除所有自定义库引用(甚至从package.json中删除),您的应用程序将成功编译。 - Jacopo Sciampi
1个回答

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尝试加载模块时抛出的。
我尝试直接在我的导入url中指向模块(而不是像这里显示的public-api),但这并没有解决问题。
可能我在我的库中做了一些奇怪的事情 :/ 希望至少对第一个疑问有所帮助
更新: 我是从projects/my-project文件夹(其中包含src等)调用npm publish,而不是应该从dist/my-project中调用。现在错误已经消失了。

我有点不确定您是否找到了解决方案以供建议和回答,根据我的阅读,您正在复制问题?在这种情况下,这不是一个答案。 - T. Nielsen
我刚刚回答了第一个疑问,因为当时我没有针对主要问题的答案。无论如何,我已经更新了我的解决方案,希望能帮助到某些人。 - gmasala
这里只是分享一些想法@gmasala,也许从问题开始任何更新都会让我有点分心。如果您知道问题,看起来您确实知道,最好从“问题可能是...”开始。 “当我遇到类似的错误描述时......” “在那种情况下,我的解决方案是......”,然后进行填充。就像我尝试了x,但没有起作用......不是必需的,如果您愿意,可以在评论中提及。但是您确实解决了问题/疑虑的第一部分,我会将我的解决方案集中在此以获得至少部分解决方案的接受。 - T. Nielsen
1
谢谢你分享这个,我以前从来没有回答过,所以对此很陌生。下次一定会采纳你的建议! - gmasala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接