Решено
Я не могу объяснить значение 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); // <--
} // <--
}