Как мне настроить мою угловую библиотеку для использования правильной установки RxJS, связав ее для локального тестирования?

Мне удалось собрать, связать и импортировать свою библиотеку в свое основное приложение, однако моя библиотека предоставляет службу, которая возвращает наблюдаемые RxJs, и у меня проблема, когда возвращаемый тип - это наблюдаемый RxJs, найденный в библиотеке node_modules, а не основное приложение node_modules:

Type 'import("D:/KeySystems-Angular-Packages/node_modules/rxjs/internal/Observable").Observable<boolean>' is not assignable to type 'import("d:/KeySystems-WebCustomerPortal/node_modules/rxjs/internal/Observable").Observable<boolean>'.
  Types of property 'source' are incompatible.
    Type 'import("D:/KeySystems-Angular-Packages/node_modules/rxjs/internal/Observable").Observable<any>' is not assignable to type 'import("d:/KeySystems-WebCustomerPortal/node_modules/rxjs/internal/Observable").Observable<any>'.ts(2322)

Вот пакет package.json моей Angular Library's Workspace:

{
  "name": "key-systems-core-workspace",
  "version": "0.0.0",
  "scripts": {},
  "dependencies": {
    "@angular/animations": "~7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    "@angular/forms": "~7.2.0",
    "@angular/platform-browser": "~7.2.0",
    "@angular/platform-browser-dynamic": "~7.2.0",
    "@angular/router": "~7.2.0",
    "@types/cpx": "^1.5.0",
    "@types/npm": "^2.0.31",
    "core-js": "^2.5.4",
    "cpx": "^1.5.0",
    "npm": "^6.12.1",
    "rxjs": "~6.3.3",
    "tslib": "^1.9.0",
    "zone.js": "~0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular-devkit/build-ng-packagr": "~0.13.0",
    "@angular/cli": "~7.3.5",
    "@angular/compiler-cli": "~7.2.0",
    "@angular/language-service": "~7.2.0",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "~4.5.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "ng-packagr": "^4.2.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tsickle": ">=0.34.0",
    "tslib": "^1.9.0",
    "tslint": "~5.11.0",
    "typescript": "~3.2.2"
  }
}

и сам проект библиотеки:

{
  "name": "state-management",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^7.0.0",
    "@angular/core": "^7.0.0",
    "rxjs": "^6.5"
  }
}

tsconfig рабочей области библиотеки:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "state-management": [
        "dist/state-management"
      ],
      "state-management/*": [
        "dist/state-management/*"
      ],
      "rxjs": [
        "./node_modules/rxjs"
      ],
      "rxjs/*": [
        "./node_modules/rxjs/*"
      ]
    }
  }
}

tsconfig моего приложения:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
      "@shared/*": ["app/shared/*"],
      "rxjs": [
        "node_modules/rxjs"
      ],
      "rxjs/*": [
        "node_modules/rxjs/*"
      ]
    },
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types",
      "src/global-types/typings.d.ts"
    ],
    "lib": [
      "es2017",
      "dom"
    ],
    "resolveJsonModule": true, // allow us to directly import json like modules
    "esModuleInterop": true, // quiets error about default exports when importing json,
    "downlevelIteration": true // supports downleveling iteration to es5 such as Sets
  }
}

Насколько я понимаю, одноранговые зависимости должны быть в пути tsconfig - я полагаю, в библиотеке, но это не сработало для меня, поэтому я попробовал оба, как вы можете видеть выше.

Это проблема, потому что это вызывает ошибку:

getBusinessClaims(): Observable<IBusinessClaims> {
    return this.stateService.get<IBusinessClaims>(ClaimType.Business);
}

person Craig    schedule 17.01.2020    source источник
comment
Возможно, вы могли бы изменить пути к rxjs в tsconfig приложений на установку в папке node_modules, откуда пакет получает rx. Тогда пути rxjs снова выстроятся в линию. Но я бы не советовал это для реальных сборок (вы в принципе не знаете, какая версия там).   -  person JJWesterkamp    schedule 17.01.2020


Ответы (1)


Ошибка звучит так, как будто импорт должен происходить из другого места, но на первый взгляд это было из-за смешанного соответствия версий. Я полагаю, что было бы неплохо заблокировать пакет RxJs на второстепенном, а не на главном, чтобы избежать этого.

person Craig    schedule 21.01.2020