Angular6: нет поставщика для инжектора при использовании локальной библиотеки - PullRequest
0 голосов
/ 25 августа 2018

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

import { Injector, NgModule } from '@angular/core'
import { createCustomElement } from '@angular/elements';
import { MyButtonComponent} from './my-button.component'

@NgModule({
    declarations: [MyButtonComponent],
    entryComponents: [MyButtonComponent]
})
export class MyButtonModule {
    constructor(injector: Injector) {
        const myButton = createCustomElement(MyButtonComponent, { injector });
        customElements.define('my-button', myButton);
    }
}

Для моего пользовательского компонента. Если я добавлю все файлы (модуль, компонент, шаблон и файлы SCSS) для моего компонента непосредственно в мое приложение, оно будет работать, как и ожидалось, поэтому я знаю, что объявление моего компонента правильное. Однако, если в моем приложении я включаю компонент из своей библиотеки, при запуске приложения с ng serve я вижу ошибку:

Error: StaticInjectorError(AppModule)[MyButtonModule -> Injector]: 
  StaticInjectorError(Platform: core)[MyButtonModule -> Injector]: 
    NullInjectorError: No provider for Injector!

Я использую Angular 6, и у меня оба проекта работают локально, и я использую ng-packagr, чтобы связать свою библиотеку. Я добавил @angular/core и @angular/elements как peerDependencies в мою библиотеку, и в моем основном приложении мне пришлось добавить

"resolutions": {
    "@angular/core": "6.1.4"
}

Для устранения ошибки cannot redeclare block-scoped variable 'ngDevMode' (не уверен, связано это или нет). Сначала я думал, что ошибка внедрения может быть вызвана этим , но я добавил preserveSymlinks в свой файл angular.json, и у меня все еще есть ошибка.

Есть мысли о том, что может быть причиной этого?

ОБНОВЛЕНИЕ: если я копирую файлы вручную из папки библиотеки и вставляю их в папку node_modules моего основного приложения, это работает, что заставляет меня думать, что это что-то, связанное с символическими ссылками.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

для запуска кармы с npm link 'ed библиотекой необходимо добавить preserveLinks: true в test (builder-angular:karma раздел) angular.json:

"test": {
      "builder": "@angular-devkit/build-angular:karma",
      "options": {
        "main": "src/test.ts",
        "preserveSymlinks": true,
        // ...
0 голосов
/ 03 октября 2018

У меня была та же проблема, я решил ее с помощью решения, установленного на этом посте: https://github.com/jvandemo/generator-angular2-library/issues/277

Проблема возникает Когда вы локально применяете команду установки npm к папке библиотеки проекта, npm создаетярлык библиотеки и появляется сообщение об ошибке.

Другое решение - это упаковать свою библиотеку с помощью команды «npm pack yourlibary» и установить сгенерированный файл с помощью npm install в целевом проекте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...