4

我最近按照本指南学习了如何创建一个角度库并将其发布以供我自己使用: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

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

提前谢谢你,比利

4

3 回答 3

2

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

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

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

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

比利

于 2018-02-15T04:24:01.687 回答
0

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

于 2018-07-18T11:20:00.287 回答
-1

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

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

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

于 2018-04-20T17:38:57.187 回答