首页 > 解决方案 > 在新的/单独的应用程序中本地使用 Angular 库

问题描述

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

当我使用 npm 从 npm 获取库时,npm i devicewise-angular没有问题。一切运行良好。

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

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

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

该库绝对可以找到并且构建良好。VSCode 智能感知会自动完成一切。

这是错误

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 安装它一样。为什么我在尝试这样使用它时会收到这个静态注入错误?

标签: angulartypescriptangular8angular-library

解决方案


小心这种黑客攻击,因为这不是节点依赖的工作方式。

linking可以使用依赖管理器(npm 或 yarn)在本地“模拟”一个库。在带有本地库(.../dist/devicewise-angular)的文件夹中
运行,您将能够在您的角度项目中运行,它将使用您的本地副本而不是官方副本。npm linkpackage.jsonnpm link devicewise-angular

详细请参考官方文档
快乐编码!


推荐阅读