"Невозможно прочитать свойство 'тип' с нулевым значением" при создании библиотечного модуля, который использует InjectionToken - PullRequest
0 голосов
/ 06 ноября 2018

Решено

Я не могу объяснить значение InjectionToken в миксе, но я нашел источник ошибки. Когда я скопировал часть своего старого кода из предыдущего воплощения этого проекта, я потянул за него импорт @angular. Я нахожусь на Windows, и каким-то образом мне удалось иметь 1 путь, который имел @Angular/router вместо @angular/router. Понятия не имею, как он работал в V6 как монорепо, но он вылетал с этим бесполезным сообщением об ошибке в сборке библиотеки V7.


Оригинальный пост

Я пытаюсь создать InjectionToken в модуле библиотеки, чтобы я мог передать в него переменные среды моего приложения. Как только служба пытается импортировать экспортированный токен, я получаю "Не удается прочитать свойство 'тип' с нулевым значением" во время сборки. Это единственный способ получить переменные env в lib? Или я что-то не так сделал?

Версия

Angular CLI: 7.0.3
Node: 8.11.1
OS: win32 x64
Angular: 7.0.1
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.10.3
@angular-devkit/build-angular      0.10.3
@angular-devkit/build-ng-packagr   0.10.3
@angular-devkit/build-optimizer    0.10.3
@angular-devkit/build-webpack      0.10.3
@angular-devkit/core               7.0.3
@angular-devkit/schematics         7.0.3
@angular/cli                       7.0.3
@ngtools/json-schema               1.1.0
@ngtools/webpack                   7.0.3
@schematics/angular                7.0.3
@schematics/update                 0.10.3
ng-packagr                         4.4.0
rxjs                               6.3.3
typescript                         3.1.3
webpack                            4.19.1

my.module.ts

import { MyHeaderService } from './my-header.service';
import { MyHeaderComponent } from './my-header.component';
export const env = new InjectionToken<any>('env');

@NgModule({
imports: [
    CommonModule,
    FormsModule, 
    ReactiveFormsModule,
    RouterModule
   ],
  declarations: [MyHeaderComponent],
  exports: [MyHeaderComponent]
})

export class MyHeaderModule {
  static forRoot(envVars: any): ModuleWithProviders {
    return {
      ngModule: MyHeaderModule,
      providers: [
        MyeaderService,
        {
          provide: env,
          useValue: envVars
        }
      ]
    };
  }
}

мой-header.service.ts

/* lines with <-- indicate they can be removed and build,
 but of course it wont have the env vars */

import { Injectable, Inject } from '@angular/core';
import { env } from './my-header.module';  // <--

@Injectable({
  providedIn: 'root'
})
export class MyHeaderService {
  constructor(@Inject(env) ENV: any) { // <--
    console.log(ENV); // <--
  } // <--
}
...