Ошибка: непредвиденное значение 'undefined' импортировано модулем


99

Я получаю эту ошибку после перехода на 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
У меня была эта проблема, когда у меня было два модуля, оба импортирующие друг друга
Мэтью Хегарти,

У меня была такая же проблема, помогла перезагрузка редактора. Он не распознавал недавно добавленные файлы.
Jyotirmaya Prusty

6
Кто еще думает, что подобная ошибка требует более подробного объяснения?
Pramesh Bajracharya

я получил эту ошибку, потому что у меня была пустая запись в массиве импорта:, ,
wutzebaer

Ответы:


218

Для тех, кто столкнулся с этой же ошибкой, моя ситуация заключалась в том, что у меня есть двойные запятые в разделе импорта

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

1
У меня была запятая в начале, например. [, BrowserModule
ozOli

1
Для меня это была точка (.)
Рагурам

1
Решил проблему и для меня!
michaeak

82

Убедитесь, что модули не импортируют друг друга. Итак, не должно быть

В модуле 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 - импорт :, поставщики:, объявления ... и т. Д. Набор массивов - в упомянутом списке строковых значений убедитесь, что запятые ДОПОЛНИТЕЛЬНЫЕ или отсутствуют ... убрав лишнюю запятую! @ Игнатий Эндрю ... ты БОГ! Angular 2/4 довольно необычный!
HydTechie

32

Ни одно из вышеперечисленных решений не помогло мне, я просто остановил и снова запустил ng serve.


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

типичная проблема, в нескольких ситуациях. Команда Angular должна над этим поработать.
Димитрис Воудриас

Мне то же. Angular должен работать с этой проблемой. Зря потратил свое время: /
Линт

Для меня это былоcircular dependency
Вишал Сутхар


23

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

import { AppComponent } from './';

Это сработало, и у меня не было красных волнистых линий, и даже intellisense вызывает AppComponent, когда вы начинаете его вводить. Но выяснилось, что это было причиной этой ошибки. После того, как я изменил его на:

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

Ошибка исчезла.


1
Я думаю, что также работает, когда вы явно пишете './index'. У нас была эта проблема в сочетании с AoT и ng-packagr.
bersling

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.

Оказывается, intellisense ввел меня в заблуждение. Для некоторых из моих модулей я импортировал родственный модуль как

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

вместо того

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

Он отлично работал во всех сборках, кроме описанной мной.

Это было ужасно, и мне повезло, что это не заняло у меня больше времени. Надеюсь, это кому-то поможет.


Вот и все. XD Вы случайно не знаете, как настроить intellisense, чтобы он не выбирал неправильную версию?
user2035039

Извини, не знаю.
Найфин

4

Было такое же исключение при попытке скомпилировать приложение Angular 5.

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

В моем случае оказалось, что это круговая зависимость, которую я обнаружил с помощью инструмента madge. . Найдены файлы, содержащие циклическую зависимость, запустив

npx madge --circular --extensions ts src/

3

Вам нужно удалить строку import { provide } from '@angular/core';из app.module.tsas, 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 01

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, это, похоже, вызывает циклическую загрузку. Вы должны импортировать в свой модуль непосредственно из файла компонента, а не из index. TNX
Томас Кац

Устранение проблем. Не могу представить, сколько времени у меня уйдет на решение этой проблемы, не увидев этого ответа
tom10271

3

У меня была эта проблема, правда, ошибка на консоли не описательна. Но если вы посмотрите на вывод angular-cli:

Вы увидите ПРЕДУПРЕЖДЕНИЕ, указывающее на круговую зависимость.

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

Таким образом, решение состоит в том, чтобы удалить один импорт из одного из модулей.


Что, если мне потребуется эта циклическая зависимость?
Эван Севи 08

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

3

Если вы уверены, что не делаете ничего плохого, завершите "ng serve" и перезапустите его. Поступая таким образом, компилятор выполняет всю свою работу, а приложение работает должным образом. Предыдущий опыт работы с модулями научил меня либо создавать их, когда "ng serve" не запущен, либо перезапускать терминал, как только я закончу.

Перезапуск «ng serve» также работает, когда вы отправляете новый компонент другому компоненту, возможно, компилятор не распознал ваш новый компонент, просто перезапустите «ng serve»

У меня это сработало всего несколько минут назад.


любая идея, почему он не может распознать новый компонент?
radio_head

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 папки a = и выполнил экспорт. Тем не менее выскакивала неопределенная ошибка. Но в IDE появляются любые красные волнистые линии

Затем, как было предложено, изменилось с

import { SearchComponent } from './';

к

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

0

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

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

заменить

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

кроме того, не экспортируйте класс по умолчанию.


Но как это должно помочь? Удаление имени файла берет index.ts папки, которую вы назначаете.
Michael Baarz

@MichaelBaarz в то время, восстановите индексный файл, чтобы помочь мне решить проблему. но теперь я обновляю версию ng до 2.4.9, этой проблемы не существует, это означает, что я могу использовать ссылку на экспорт файла index.ts. поэтому я думаю, что это может быть проблема с ng build
wfsovereign

По крайней мере, это крайний случай и результат плохой структуры пакета. Пакеты не должны иметь обратных поездок. Уточнение структуры пакета все равно исправит это.
Майкл Баарц

@MichaelBaarz да, я согласен с вами.
wfsovereign

0

Моя проблема заключалась в неправильном написании имени компонента внутри component.ts .

Оператор импорта не показал ошибки, но объявление показало, что ввело меня в заблуждение.


0

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


0

Скорее всего, ошибка будет связана с файлом AppModule.ts.

Чтобы решить эту проблему, проверьте, объявлен ли каждый компонент, и каждая ли объявленная нами услуга помещена в провайдеры и т. Д.

И даже если в файле AppModule все кажется правильным и вы по-прежнему получаете сообщение об ошибке, остановите запущенный экземпляр angular и перезапустите его еще раз. Это может решить вашу проблему, если все в файле модуля правильно и если вы по-прежнему получаете ошибку.


0

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

Один с ошибкой:

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

Изменил это на:

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

1
Не связано с проблемой, поскольку BrowserModule экспортирует CommonModule, и оба они являются избыточными.
Semir Deljić

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!

потому что есть только файл root.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.