Помилка: несподіване значення "undefined" імпортовано модулем


95

Я отримую цю помилку після переходу на NgModule, помилка не надто допомагає, будь-яка порада?

Error: Error: Unexpected value 'undefined' imported by the module 'AppModule'
        at new BaseException (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:5116:27)
        at eval (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:13231:35)
        at Array.forEach (native)
        at CompileMetadataResolver.getNgModuleMetadata (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:13215:48)
        at RuntimeCompiler._compileComponents (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15845:51)
        at RuntimeCompiler._compileModuleAndComponents (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15769:41)
        at RuntimeCompiler.compileModuleAsync (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15746:25)
        at PlatformRef_._bootstrapModuleWithZone (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:9991:29)
        at PlatformRef_.bootstrapModule (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:9984:25)
        at Object.eval (http://localhost:5555/app/main.js:8:53)
    Evaluating http://localhost:5555/app/main.js
    Error loading http://localhost:5555/app/main.js "Report this error at https://github.com/mgechev/angular2-seed/issues"(anonymous function) @ contracts:142ZoneDelegate.invoke @ zone.js?1472711930202:332Zone.run @ zone.js?1472711930202:225(anonymous function) @ zone.js?1472711930202:586ZoneDelegate.invokeTask @ zone.js?1472711930202:365Zone.runTask @ zone.js?1472711930202:265drainMicroTaskQueue @ zone.js?1472711930202:491ZoneTask.invoke @ zone.js?1472711930202:435

app.module.ts:

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { APP_BASE_HREF } from '@angular/common';
    import { RouterModule } from '@angular/router';
    import { HttpModule } from '@angular/http';
    import { AppComponent } from './app.component';
    import { routes } from './app.routes';

    import { provide } from '@angular/core';

    //dgf ng2-translate
    import { TRANSLATE_PROVIDERS, TranslateLoader, TranslateStaticLoader, MissingTranslationHandler } from 'ng2-translate/ng2-translate';
    import { HTTP_PROVIDERS, Http } from '@angular/http';
    import { FormsModule,ReactiveFormsModule } from '@angular/forms';
    import { TranslationNotFoundHandler } from './shared/common/TranslationNotFoundHandler';
    //dgf ng2-translate END

    import {CalendarModule,DataTableModule,DialogModule,PanelModule} from 'primeng/primeng';

    import {TranslateModule} from 'ng2-translate/ng2-translate';

    import { AuthGuard,AppConfigService,AppConfig,DateHelper,ThemeComponent,ToolbarComponent, RemoveHostTagDirective } from './index';
    import { HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent } from './index';


@NgModule({
  imports: [BrowserModule, HttpModule, RouterModule.forRoot(routes), /* AboutModule, HomeModule, SharedModule.forRoot()*/
          FormsModule,
          ReactiveFormsModule,
          //third-party
          ,TranslateModule.forRoot() //,
          //third-party PRIMENG
          ,CalendarModule,DataTableModule,DialogModule,PanelModule
  ],
  declarations: [
    AppComponent,ThemeComponent, ToolbarComponent, RemoveHostTagDirective,
    HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent
  ],
  providers: [{
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    FormsModule,
    ReactiveFormsModule,
    provide(TranslateLoader, { //DGF ng2-translate
          useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
          deps: [Http]
      }),
    provide(MissingTranslationHandler, { useClass: TranslationNotFoundHandler }), //DGF ng2-translate

    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ],
  bootstrap: [AppComponent]
})

export class AppModule { }

3
У мене була ця проблема, коли у мене було два модулі, які імпортували один одного
— Matthew Hegarty

У мене була та сама проблема, допомогло перезапуск редактора. Він не розпізнавав нещодавно додані файли.
— Jyotirmaya Prusty

6
Хто ще вважає, що помилки, подібні цим, повинні пояснити мені більше?
— Прамеш Байрачар'я

я отримав цю помилку, оскільки в масиві імпортування був порожній запис:, ,
— wutzebaer

Відповіді:


210

Для тих, хто стикається з цією ж помилкою, моя ситуація полягала в тому, що я маю подвійні коми у розділі імпорту

imports: [
      BrowserModule,
      HttpModule,
      FormsModule,
      RouterModule.forRoot(appRoutes), , // <-- this was the error
      // .... 
],

1
У мене на початку була кома, наприклад. [,
— BrowserModule

1
Для мене це було крапкою (.)
— Рагхурам

1
Вирішив питання і для мене!
— michaeak

81

Переконайтесь, що модулі не імпортують один одного. Отже, не повинно бути

У модулі A: imports[ModuleB]

У модулі B: imports[ModuleA]


59

Це може бути спричинено різними сценаріями, такими як

  1. Коми відсутні
imports: [
    BrowserModule
   ,routing <= Missing Comma
   ,FeatureComponentsModule
  ],
  1. Подвійні коми
imports: [
    BrowserModule, 
   ,routing <=Double Comma
   ,FeatureComponentsModule
  ],
  1. Експорт нічого з модуля
  2. Синтаксичні помилки
  3. Помилки друкарської помилки
  4. Крапка з комою всередині Об'єкти, масиви
  5. Неправильні заяви про імпорт

3
Гарне резюме. Було б чудово, якби Angular міг додати якусь інформацію про те, де і яким чином не вдається завантажити модуль. На сьогоднішній день це одна з найбільш нудних речей для налагодження. Не впевнені, що якщо я розумію біт "відсутніх коми", це має компілювати нормально?
— unitario

Я розумію відсутність запчастин - перевірка файлів app.module.ts - імпорт :, провайдери :, декларації ... і т.д. набір масивів - У списку згаданих значень рядків переконайтеся, що коми є ДОДАТКОВИМИ або відсутніми ... Я вирішив це видаливши зайву кому! @Ignatius Andrew ... ти БОГ! Кутова 2/4 досить химерна!
— HydTechie

30

Жодне з наведених вище рішень не спрацювало для мене, а просто зупинилося і знову запустило "ng serve".


5
Ха-ха так, і для мене теж. Коли ви балуєтеся з маршрутизацією, іноді Angular потребує перезапуску. Те саме з переміщенням важливого базового імпорту чи експорту між вашими модулями.
— Флоріан Лейтгеб

типова проблема, в декількох ситуаціях. Над цим повинна працювати команда Angular.
— Димитріс Вудріас,

Те саме для мене. Angular повинен працювати над цим питанням. Даремно витратив час: /
— Lint

Для мене це булоcircular dependency
— Vishal Suthar


23

У мене сталася ця помилка, оскільки у мене був index.tsфайл у кореневій частині мого додатка, який експортував мою app.component.ts. Тож я подумав, що можу зробити наступне:

import { AppComponent } from './';

Це спрацювало і не дало мені жодних червоних викривлених ліній, і навіть intellisense викликає AppComponent, коли ви починаєте його вводити. Але з’ясуйте, що причиною цієї помилки є. Після того, як я змінив його на:

import { AppComponent } from './app.component';

Помилка зникла.


1
Я думаю, що також працює, коли ви явно пишете './index'. У нас була ця проблема в поєднанні з AoT та ng-Packagr.
— берслінг

8

Переконайтесь, що вам не слід імпортувати такий модуль / компонент:

import { YOUR_COMPONENT } from './';

Але це повинно бути

import { YOUR_COMPONENT } from './YOUR_COMPONENT.ts';

8

Це питання кругових залежностей двох модулів

Модуль 1: імпорт Модуль 2
Модуль 2: імпорт Модуль 1


5

Я будую бібліотеку компонентів і почав отримувати цю помилку в своєму додатку, який імпортує зазначену бібліотеку. При запуску ng build --prodабо ng serve --aotв додатку я отримував би:

Unexpected value 'undefined' imported by the module 'ɵm in node_modules/<library-name>/<library-name>.d.ts'

Але ніяких помилок при використанні ng serveабо при тестуванні модулів у самій бібліотеці навіть при вбудуванні --prod.

Виявляється, мене також ввів в оману інтеліссенс. Для кількох моїх модулів я імпортував сестринський модуль як

import { DesignModule } from '../../design';

замість

import { DesignModule } from '../../design/design.module';

Він чудово працював у всіх збірках, крім тієї, яку я описав.

Це було страшно закріпити, і мені пощастило, що це не зайняло більше часу, ніж це було. Сподіваюся, це комусь допоможе.


Це було xD Чи знаєте ви випадково, як налаштувати intellisense, щоб не вибрати неправильну версію?
— user2035039

Вибачте, ні.
— Найфін

4

Мав такий самий виняток при спробі скомпілювати програму Angular 5.

Unexpected value 'undefined' imported by the module 'DemoAppModule'

У моєму випадку виявилося, що це була кругова залежність, яку я виявив, використовуючи інструмент мадж . Знайдено файли, що містять циклічну залежність, запустивши

npx madge --circular --extensions ts src/

3

Вам доведеться видалити рядок import { provide } from '@angular/core';із того app.module.ts, що provideвже застаріло. Ви повинні використовувати, provideяк зазначено нижче, у постачальниках:

providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    FormsModule,
    ReactiveFormsModule,
    // disableDeprecatedForms(),
    // provideForms(),
    // HTTP_PROVIDERS, //DGF needed for ng2-translate
    // TRANSLATE_PROVIDERS, //DGF ng2-translate (not required, but recommended to have 1 unique instance of your service)
    {
        provide : TranslateLoader,
        useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
        deps: [Http]
    },
    {
        provide : MissingTranslationHandler,
        useClass: TranslationNotFoundHandler
    },

    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ]

це має сенс, я це зробив, але помилка все та ж
— surfealokesea

3

Просто розміщення провайдера всередині forRoot працює: https://github.com/ocombe/ng2-translate

@NgModule({
  imports: [BrowserModule, HttpModule, RouterModule.forRoot(routes), /* AboutModule, HomeModule, SharedModule.forRoot()*/
          FormsModule,
          ReactiveFormsModule,
          //third-party
          TranslateModule.forRoot({
            provide: TranslateLoader,
            useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
            deps: [Http]
          })
          //third-party PRIMENG
          ,CalendarModule,DataTableModule,DialogModule,PanelModule
  ],
  declarations: [
    AppComponent,ThemeComponent, ToolbarComponent, RemoveHostTagDirective,
    HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent
  ],
  providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    // FormsModule,
    ReactiveFormsModule,
    { provide : MissingTranslationHandler, useClass: TranslationNotFoundHandler},
    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ],
  bootstrap: [AppComponent]
})

export class AppModule { }

3

для цього існує ще одне просте рішення. У мене є 2 модулі, які якимось чином заглиблені в структуру, використовуючи один одного. Я зіткнувся з тією ж проблемою з круговими залежностями з webpack та angular 2. Я просто змінив спосіб оголошення одного модуля:

....

@NgModule({
    imports: [
        CommonModule,
        FormsModule,
        require('../navigation/navigation.module')
    ],
    declarations: COMPONENTS,
    exports: COMPONENTS
})
class DppIncludeModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: DppIncludeModule
        };
    }
}

export = DppIncludeModule;

Коли я зараз використовую оператор import для атрибута ngModule, я просто використовую:

@NgModule({
    imports: [
        CommonModule,
        ServicesModule.forRoot(),
        NouisliderModule,
        FormsModule,
        ChartModule,
        DppAccordeonModule,
        PipesModule,
        require('../../../unbranded/include/include.module')
    ],
....

З цим усі проблеми відсутні.


Ви можете трохи детальніше описати, як це працює? Наприклад, як ви використовуєте DppIncludeModule у своєму компоненті?
— Kate S

Кейт, вибачте за пізню відповідь. Я не використовую модуль у компоненті, я інкапсулюю компоненти в модулі. Модулі використовуються разом. Можливо, у вас тут є інша проблема з невизначеною помилкою.
— Michael Baarz,

3

Моєю проблемою було два рази експортувати файл index.ts

Видалення одного з них вирішило проблему.


святе лайно це мені вдалося! Якщо ви експортуєте модуль із index.ts, а ваш модуль імпортує компоненти модулів із того самого index.ts, це, здається, спричиняє кругове завантаження. Вам слід імпортувати у ваш модуль безпосередньо з файлу компонента, а не з індексу. TNX
— Томас Кац

Проблема постріл. Не уявляю, скільки часу знадобиться мені для вирішення цього питання, не побачивши цієї відповіді
— tom10271

3

У мене виникла ця проблема, правда, помилка на консолі не є описовою. Але якщо подивитися на вихідний результат angular-cli:

Ви побачите ПОПЕРЕДЖЕННЯ, вказуючи на кругову залежність

WARNING in Circular dependency detected:
module1 -> module2
module2 -> module1

Тож рішення полягає у видаленні одного імпорту з одного з Модулів.


Що робити, якщо мені потрібна така кругова залежність?
— Еван

@RuneStar Я думаю, вам потрібно буде перенести залежність на модуль вищого рівня, а потім імпортувати новий модуль на обидва модулі (X).
— T04435

2

Проблема в тому, що існує принаймні один імпорт, для якого відсутній вихідний файл.

Наприклад, я отримав ту ж помилку, коли використовував

       import { AppRoutingModule } from './app-routing.module';

Але файлу './app-routing.module' у вказаному шляху не було.

Я видалив цей імпорт, і помилка зникла.


2

У мене була та сама помилка, жодна з наведених вище порад не допомогла.

У моєму випадку це було викликано WebStorm, об'єднавши два імпорти в один.

import { ComponentOne, ComponentTwo } from '../component-dir';

Я видобув це у два окремі імпорти

import { ComponentOne } from '../component-dir/component-one.service';
import { ComponentTwo } from '../component-dir/component-two.model';

Після цього він працює без помилок.


Дякую друже. Це допомогло
— DinoMyte

дублікат попереднього відповіді: stackoverflow.com/a/49667611/1243048
— Maelig

@Maelig Я думаю, що у пов'язаній відповіді це була дещо інша проблема. Не знаю, чи це друкарська помилка, але є проблема і з належним режимом, один раз ./modelsіншим часом./model
— Якуб Рибінський

1

Якщо ваш індекс експортує модуль - цей модуль не повинен імпортувати свої компоненти з того самого індексу, він повинен імпортувати їх безпосередньо з файлу компонентів.

У мене виникла ця проблема, і коли я змінив імпорт компонентів у файлі модуля за допомогою індексу на імпорт за допомогою прямого файлу, це вирішено.

наприклад змінено:

import { NgModule } from '@angular/core';
import { MainNavComponent } from './index';
@NgModule({
  imports: [],
  exports: [MainNavComponent],
  declarations: [ MainNavComponent ],
  bootstrap:    [ MainNavComponent ]
})
export class MainNavModule {}

до:

import { NgModule } from '@angular/core';
import { MainNavComponent } from './MainNavComponent';
@NgModule({
  imports: [],
  exports: [MainNavComponent],
  declarations: [ MainNavComponent ],
  bootstrap:    [ MainNavComponent ]
})
export class MainNavModule {}

також видаліть тепер непотрібний експорт з вашого індексу, наприклад:

export { MainNavModule } from './MainNavModule';
export { MainNavComponent } from './MainNavComponent';

до:

export { MainNavModule } from './MainNavModule';

Дякую, що це була моя проблема, IDE імпортує з папки ex: '/ components', моя бібліотека створюється без проблем, але не може бути використана в іншій бібліотеці
— Моста,

1

Ще однією причиною може бути такий код:

import { NgModule } from '@angular/core';
import { SharedModule } from 'app/shared/shared.module';
import { CoreModule } from 'app/core/core.module';
import { RouterModule } from '@angular/router';
import { COMPANY_ROUTES } from 'app/company/company.routing';
import { CompanyService } from 'app/company/services/company.service';
import { CompanyListComponent } from 'app/company/components/company-list/company-list.component';

@NgModule({
    imports: [
        CoreModule,
        SharedModule,
		RouterModule.forChild(COMPANY_ROUTES)
    ],
    declarations: [
		CompanyListComponent
    ],
    providers: [
		CompanyService
    ],
    exports: [
    ]
})
export class CompanyModule { }

Оскільки експорт - це порожній масив, і перед ним його слід видалити.


1

У мене була та ж проблема, я додав компонент в index.ts папки = та здійснив експорт. Проте невизначена помилка з’являлася. Але IDE висуває наші будь-які червоні звивисті лінії

Потім як запропоновано змінили з

import { SearchComponent } from './';

до

import { SearchComponent } from './search/search.component';

1

Поки ви впевнені, що не робите нічого поганого, будь ласка, припиніть "ng serve" і перезапустіть його. Роблячи це, компілятор виконує всю свою роботу, і додаток працює як слід. Попередній досвід роботи з модулями навчив мене або створювати їх, коли "ng serve" не працює, або перезапустити термінал, коли я закінчу.

Перезапуск "ng serve" також працює, коли ви передаєте новий компонент іншому компоненту, можливо, компілятор не розпізнав ваш новий компонент, просто перезапустіть "ng serve"

Це працювало у мене всього кілька хвилин тому.


0

Я виправляю це шляхом видалення всього файлу експорту індексу, включаючи канал, службу. тоді весь шлях імпорту файлів є певним шляхом. напр.

import { AuthService } from './_common/services/auth.service';

замінити

import { AuthService } from './_common/services';

крім того, не експортуйте клас за замовчуванням.


Але як це має допомогти? Видалення імені файлу займає index.ts папки, яку ви призначаєте.
— Michael Baarz,

У той час @MichaelBaarz, reomve файл індексу допоможе мені вирішити проблему. але зараз я оновлюю версію ng до 2.4.9, цієї проблеми не існує, це означає, я можу використовувати посилання на експорт файлу index.ts. тому я думаю, що це, можливо, проблема з ng build
— wfsovereign

Принаймні, це крайовий випадок і результати поганої структури пакета. Пакети не повинні мати зворотних поїздок. Уточнення структури пакета все одно це виправить.
— Michael Baarz

@MichaelBaarz так, я з вами згоден.
— wfsovereign

0

Моєю проблемою було неправильно написане ім'я компонента всередині component.ts.

У заяві про імпорт не було помилки, але в декларації було, що ввів мене в оману.


0

Невикористаний аргумент " приватний http: Http " у конструкторі app.component.ts спричинив мені таку ж помилку, і він вирішився після видалення невикористаного аргументу конструктора


0

Швидше за все помилка буде пов'язана з файлом AppModule.ts.

Щоб вирішити цю проблему, перевірте, чи декларується кожен компонент, а кожна служба, яку ми заявляємо, розміщується у постачальників тощо.

І навіть якщо у файлі AppModule все здається правильно, і ви все одно отримуєте помилку, зупиніть запущений кутовий екземпляр і перезапустіть його ще раз. Це може вирішити вашу проблему, якщо все у файлі модуля правильно, і якщо ви все ще отримуєте помилку.


0

Для мене проблема була вирішена шляхом зміни послідовності імпорту:

Один із я отримав помилку:

imports: [ 
 BrowserModule, HttpClientModule, AppRoutingModule, 
 CommonModule
],

Змінив це на:

   imports: [
    BrowserModule, CommonModule, HttpClientModule,
    AppRoutingModule
  ],

1
Не пов'язано з проблемою, оскільки BrowserModule експортує CommonModule, оскільки обидва вони є зайвими.
— Семір Деліч

0

Наведені вище рішення для мене не працюють.

Тому я підтримав версію angular-cli 1.6.4 для 1.4.4, і це вирішило мою проблему.

Я не знаю, чи це найкраще рішення, але наразі це спрацювало для мене


0

Я стикався з тією ж проблемою. Проблема полягала в тому, що я імпортував якийсь клас із index.ts

    import {className} from '..shared/index'

index.ts містить оператор експорту

    export * from './models';

Я змінив його на файл .ts, який містить фактичний об'єкт класу

    import {className} from '..shared/model'

і це вирішено.


0

Для мене ця помилка була спричинена просто невикористаним імпортом:

import { NgModule, Input } from '@angular/core';

В результаті помилка:

Введення оголошено, але його значення ніколи не читається

Прокоментуйте це, і помилка не виникає:

import { NgModule/*, Input*/ } from '@angular/core';

0

Я зіткнувся з цією проблемою в ситуації: - app-module --- app-routing // app router ----- imports: [RouterModule.forRoot(routes)] --- demo-module // sub-module ----- demo-routing ------- imports: [RouterModule.forRoot(routes)] // --> should be RouterModule.forChild!

тому що існує лише a root.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.