【问题标题】:NullInjectorError: No provider for NgZone when referencing a custom npm packageNullInjectorError:引用自定义 npm 包时没有 NgZone 提供程序
【发布时间】:2023-03-18 21:20:01
【问题描述】:

我最近按照本指南学习了如何创建 Angular 库并将其发布以供我自己使用:https://medium.com/@nikolasleblanc/building-an-angular-4-component-library-with-the-angular-cli-and-ng-packagr-53b2ade0701e

在打包库并从我自己的 Angular 项目中引用它之后,我遇到了这个错误:NullInjectorError: No provider for NgZone。

当我尝试在我的控制器中注入 NgZone 时,没有引用我的库中也注入它的组件,我的项目工作得很好。但是,当我尝试在我的视图中引用库组件时,它不再起作用!

我花了一整天的时间试图解决这个问题,但是关于这个错误的信息很少甚至没有,我相信它与 NgZone 无关,而是我忽略了。

我不确定我应该提供什么样的信息来更好地解决此错误,所以请随时问我。

我的库和项目都参考 Angular 5.0.0 和 zone.js 0.8.12。你可以在下面找到我在 github 上发布的库:https://github.com/lakylekidd/skating-library

任何帮助将不胜感激,这让我发疯了!

提前谢谢你, 比利

【问题讨论】:

  • 您是否将peerDependencies(如@angular/core)添加到您图书馆的package.json 中?
  • 我做了...我已经包含了这个"peerDependencies": { "@agm/core": "^1.0.0-beta.2", "@angular/core": "^5.0.0", "lodash": "^4.17.5", "zone.js": "0.8.12" },,但我一直收到同样的错误。
  • 你是否在 npm 上发布了你的库?可以安装吗?
  • 你好,是的,我已经在 npm 上发布了我的库并自己测试了它......事实证明,当我 npm install 时它可以工作,因为我也做了一些修改,我将在一个帖子。感谢您的帮助!

标签: angular ngzone


【解决方案1】:

我想我明白为什么它不起作用了。

原来我的库依赖于 angular 5.2,而我的应用程序有 angular 5.0,所以我将应用程序升级到 5.2。此外,正如 yurzui 所建议的,我在我正在使用的所有库中添加了 peerDependencies。我在 npm 上发布了我的库,npm install 在我的项目中编辑了它。它工作得很好。

我不是 100% 确定问题出在哪里,但是在执行了所有这些步骤之后,问题就消失了。

希望这对以后遇到同样问题的人有所帮助。

比利

【讨论】:

    【解决方案2】:

    如果您在项目中使用 webpack,则可以很容易地解决。 您可以在解析模块时指定当前 node_modules 的绝对路径。

     resolve: {
                extensions: ['.ts', '.js'],
                modules: [helpers.root('src'),  helpers.root('node_modules')]
            },
    

    默认情况下,webpack 使用 node_module 的相对路径,这将导致 npm 链接的包使用它们自己的库 在自己的node_modules中指定

    【讨论】:

    • 不要这样做!它可以防止具有私有依赖的模块导入正确的版本(或任何版本)。
    【解决方案3】:

    在这个问题上花了很多时间:(希望它可以帮助某人节省时间: https://github.com/angular/angular-cli/issues/8117

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 2020-09-03
      • 2021-09-08
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 2020-02-05
      • 2019-12-28
      相关资源
      最近更新 更多