在新的/单独的应用程序中本地使用Angular库

时间:2019-06-26 17:24:12

标签: angular typescript angular8 angular-library

我试图包括一个在新应用程序中构建的库。它构建成功,但是在运行时main.ts:13 Error: inject() must be called from an injection context上出现错误。

当我使用npm i devicewise-angular从npm抓取库时,没有问题。一切正常。

使用该库生成的测试应用程序也可以使用本地库。

我已将路径添加到我的tsconfig.json文件中。

{
  ...
  "compilerOptions": {
  ...
    "paths": {
      "devicewise-angular": [
        "../devicewise-angular/dist/devicewise-angular"
      ]
    }
  }
  ...
}

最肯定可以找到该库,并且可以正常运行。 VSCode intellisense会自动完成所有操作。

这是错误

main.ts:13 Error: inject() must be called from an injection context
    at injectInjectorOnly (core.js:520)
    at ɵɵinject (core.js:536)
    at DevicewiseAngularService_Factory (devicewise-angular.js:984)
    at _callFactory (core.js:23211)
    at _createProviderInstance (core.js:23154)
    at resolveNgModuleDep (core.js:23113)
    at NgModuleRef_.get (core.js:24206)
    at resolveDep (core.js:24736)
    at createClass (core.js:24584)
    at createDirectiveInstance (core.js:24400)

看着devicewise-angular.js:984,我看到了:

/** @nocollapse */ DevicewiseAngularService.ngInjectableDef = ɵɵdefineInjectable({ factory: function DevicewiseAngularService_Factory() { return new DevicewiseAngularService(ɵɵinject(CookieService), ɵɵinject(DevicewiseApiService), ɵɵinject(DevicewiseSubscribeService), ɵɵinject(DevicewiseMultisubscribeService)); }, token: DevicewiseAngularService, providedIn: "root" });

使用库的本地版本时,我希望得到与使用npm安装时相同的结果。为什么在尝试使用这种静态注入错误时会出现此错误?

1 个答案:

答案 0 :(得分:0)

请谨慎对待此类黑客,因为这不是节点依赖性的工作方式。

可以使用依赖管理器(npm或yarn)linking在本地“模拟”库。
在本地库及其npm link(... / dist / devicewise-angular)所在的文件夹中运行package.json,您将可以在角度项目中运行npm link devicewise-angular,并且它将使用您的本地副本而不是正式副本。

请参考official documentation以了解其详细信息。
编码愉快!