NullInjectorError: Нет поставщика для ComponentFactoryResolver (Angular v6) - PullRequest
0 голосов
/ 27 октября 2018

Цель : у меня есть основное приложение и библиотека. Мне нужно иметь возможность протестировать эту библиотеку с основным приложением в режиме реального времени. Другими словами, мне нужно иметь возможность собрать свою библиотеку, и основное приложение сразу распознает изменение (не хочу нажимать на npm при каждом изменении).

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

StaticInjectorError (Платформа: ядро) [PrmCompiler -> ComponentFactoryResolver]: NullInjectorError: Нет поставщика для ComponentFactoryResolver! ; Зона:; Задача: Promise.then; Значение: ошибка: StaticInjectorError (AppModule) [PrmCompiler -> ComponentFactoryResolver]:

Настройка : я использую paths в tsConfig для ссылки на библиотеку

"compilerOptions": {
     "typeRoots": [
      "node_modules/@types"
    ],
    "paths": {
      "@stud/myLibrary": ["../librarys/dist/MyLibrary"],
    }   
}

Я собираю библиотеку, используя prod: true и aot: true

Здесь находится tsconfig.lib.ts в библиотеке.

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "module": "es2015",
    "rootDir": "src",
    "moduleResolution": "node",
    "declaration": true,
    "sourceMap": true,
    "inlineSources": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "types": [],
    "lib": [
      "dom",
      "es2015"
    ]
  },
  "angularCompilerOptions": {
    "annotateForClosureCompiler": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true,
    "flatModuleId": "AUTOGENERATED",
    "flatModuleOutFile": "AUTOGENERATED",
    "preserveSymlinks": true
  },
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts",
    "**/*.stubs.ts"
  ]
}

У меня preserveSymlinks установлено значение true. (в нескольких местах было сказано сделать это, но это не работает)

Вот файл angular.json для библиотеки.

 "myLibrary": {
  "root": "projects/myLibrary",
  "sourceRoot": "projects/myLibrary/src",
  "projectType": "library",
  "prefix": "prm",
  "architect": {
    "build": {
      "builder": "@angular-devkit/build-ng-packagr:build",
      "options": {
        "tsConfig": "projects/myLibrary/tsconfig.lib.json",
        "project": "projects/myLibrary/ng-package.json"
      },
      "configurations": {
        "production": {
          "project": "projects/myLibrary/ng-package.prod.json"
        }
      }
    },
 ....
 }

Если я опубликую приложение, оно работает нормально, проблема может возникнуть, только если я пытаюсь получить к нему доступ с помощью paths.

...