代码之家  ›  专栏  ›  技术社区  ›  vicatcu

在模板中的Monrepo库中使用Ionic元素会导致应用程序级“没有ChangeDetectorRef的提供者”错误

  •  1
  • vicatcu  · 技术社区  · 4 年前

    我正试图为我的Ionic 5项目迁移到单仓库结构。为了在这个monorepo中的多个项目中重用我的Ionic/Angular组件和服务,我试图将它们分离到共享库中。一切都很顺利,直到我真正尝试在共享库组件的模板中使用离子元素(例如离子列表、离子按钮、离子项等)。当我这样做的时候,我开始收到这种性质的运行时错误(请注意,没有构建时错误):

    ERROR Error: Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[IonItem -> ChangeDetectorRef]: 
      StaticInjectorError(Platform: core)[IonItem -> ChangeDetectorRef]: 
        NullInjectorError: No provider for ChangeDetectorRef!
    

    我创建了一个最小的可重复示例,并将其放在GitHub上: https://github.com/vicatcu/devdacticMulti/tree/routing-problem

    克隆它,然后在根目录中运行以下命令:

    npm install && cd ./libraries/academy-lib/ && npm install && cd ../../projects/appOne && npm install && cd ../../ && npm run appOne
    

    …它将启动一个web浏览器,在开发工具控制台中一切正常。如果你导航到/ref而不是/layed,你会得到我所指的异常 libraries/academy-lib/src/lib/academy-lib.component.ts 不包含任何离子元素,该页面也将加载而不会出错。

    值得一提的是,我一直在追随 https://devdactic.com/ionic-multi-app-shared-library 为了达到这一点。我错过了什么?

    0 回复  |  直到 4 年前
        1
  •  1
  •   vicatcu    4 年前

    因此,经过多次试验和磨难,这最终被证明是某种节点模块链接问题。解决方案是从根目录和所有子目录中删除node_modules文件夹,然后将子项目中的依赖关系和开发依赖关系集成到monorepo和npm install根目录下的package.json文件中。然后通过npm node_modules解析的魔力,一切都解决了。

    推荐文章