我最近按照本指南学习如何创建角度库并将其发布供我自己使用:https://medium.com/@nikolasleblanc/building-an-angular-4-component-library-with-the-angular-cli-and-ng-packagr-53b2ade0701e
打包库并从我自己的角度项目中引用它后,我想出了这个错误:NullInjectorError:没有NgZone的提供者。
当我尝试在我的控制器中注入NgZone时,没有引用我的库中也注入它的组件,我的项目工作得很好。但是,当我尝试在视图中引用库组件时,它不再有效!
我花了一整天的时间试图解决这个问题,但是有关此错误的信息很少甚至没有,我相信它与NgZone无关,而是我忽视了一些事情。
我不确定应该提供哪种信息来更好地解决此错误,所以请随时问我。
我的库和项目都引用了Angular 5.0.0和zone.js 0.8.12。您可以在github上找到我的图书馆:https://github.com/lakylekidd/skating-library
任何帮助都会很感激,它让我疯狂!
提前谢谢你, 比利
答案 0 :(得分:2)
我想我弄明白了为什么它不起作用。
原来我的库有一个依赖于角度5.2,我的应用程序有角度5.0,所以我将我的应用程序升级到5.2。另外,正如yurzui所建议的,我在peerIpendencies中添加了我正在使用的所有库。我在npm上发布了我的库,npm install
在我的项目中编辑了它。它运作得很好。
我不是100%确定问题是什么,但在完成所有这些步骤后,问题就消失了。
希望如果有人在将来遇到同样的问题,这会有所帮助。
比利
答案 1 :(得分:0)
在此问题上花费了很多时间:(希望它可以帮助某人节省时间: https://github.com/angular/angular-cli/issues/8117
答案 2 :(得分:-1)
如果您在项目中使用webpack,则可以非常轻松地解决。 您可以在解析模块时指定当前node_modules的绝对路径。
resolve: {
extensions: ['.ts', '.js'],
modules: [helpers.root('src'), helpers.root('node_modules')]
},
默认情况下,webpack使用node_module的相对路径,这将导致使用自己的libs的npm链接包 在他们自己的node_modules中指定